所以我在 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']
最佳答案
我会找到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
关于python - 在scrapy中提取em标签内的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33088402/