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

标签 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']

最佳答案

我会找到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/

相关文章:

python - Scrapy 合约具有多种解析方法

python - 如何从 ('a' , 'a/b' , 'a/b/c' , ('a' ) 得到 'b' , 'c' , 0x104567910 )?

python - Django 管理界面 : using horizontal_filter with ManyToMany field with intermediate table

python - Pandas Groupby 日名称

python - Scrapy合并到1个列表

python-3.x - Scrapy 一次运行所有蜘蛛。我只想一次运行一只蜘蛛。 Scrapy crawl <spider>

Python logging.FileHandler 将消息打印到标准输出中

python - Jupyter笔记本: let a user inputs a drawing

Python Scrapy - 需要动态 HTML、div 和 span 内容

python - 如何使用python下载推送到浏览器的文件?