在scrapy中提取em标签内的文本

时间:2015-10-12 19:04:21

标签: python scrapy

所以我在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']

1 个答案:

答案 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