所以我在scrapy shell中,我尝试的其中一个选择器产生了这个:
>>> response.css(".result-title a").extract()
[u'<a href="#"><em>Membership warehouse</em></a>', u'<a href="#">Publix</a>', u'<a href="#">Kroger Pharmacy</a>']
现在只获得我这样做的文字:
>>> response.css(".result-title a::text").extract()
[u'Publix', u'Kroger Pharmacy']
很明显,这省略了第一个元素,它在文本周围有一个额外的em标签。如何将它与正常文本一起提取,以便我的最终输出是:
[u'Membership warehouse', u'Publix', u'Kroger Pharmacy']
答案 0 :(得分:3)
我会在a
内的任何级别找到所有文本节点并“加入”它们:
for a in response.css(".result-title a"):
print("".join(a.xpath(".//text()").extract()))
演示:
$ cat index.html
<div class="result-title">
<a href="#"><em>Membership warehouse</em></a>
<a href="#">Publix</a>
<a href="#">Kroger Pharmacy</a>
</div>
$ scrapy shell index.html
In [1]: for a in response.css(".result-title a"):
print("".join(a.xpath(".//text()").extract()))
...:
Membership warehouse
Publix
Kroger Pharmacy