Html 提取文本xpath片段
大家好,我想在scrapy中使用xpath从html块中提取所有文本 假设我们有这样一个块:Html 提取文本xpath片段,html,xpath,scrapy,Html,Xpath,Scrapy,大家好,我想在scrapy中使用xpath从html块中提取所有文本 假设我们有这样一个块: <div> <p>Blahblah</p> <p><a>Bluhbluh</a></p> <p><a><span>Bliblih</span></a></p> </div> text_array = selector
<div>
<p>Blahblah</p>
<p><a>Bluhbluh</a></p>
<p><a><span>Bliblih</span></a></p>
</div>
text_array = selector.xpath('//div/p//text()').extract()
布拉布拉赫
布鲁布鲁
哎呀
我想将文本提取为[“Blahblah”、“Bluhbluh”、“Blihblih”]。我希望xpath递归地在div节点中查找文本。
我听说过://div/p[genderant或self::*]/text()
,但它不提取嵌套元素
干杯!
Seb您可以在每个
p
元素上使用XPath的string()
函数:
>>> import scrapy
>>> selector = scrapy.Selector(text="""<div>
... <p>Blahblah</p>
... <p><a>Bluhbluh</a></p>
... <p><a><span>Bliblih</span></a></p>
... </div>""")
>>> [p.xpath("string()").extract() for p in selector.xpath('//div/p')]
[[u'Blahblah'], [u'Bluhbluh'], [u'Bliblih']]
>>> import operator
>>> map(operator.itemgetter(0), [p.xpath("string()").extract() for p in selector.xpath('//div/p')])
[u'Blahblah', u'Bluhbluh', u'Bliblih']
>>>
>>导入刮屑
>>>选择器=scrapy.selector(text=”“”
布拉布拉
…布鲁赫布鲁赫
…哎呀
... """)
>>>[p.xpath(“string()”).selector.xpath('//div/p')中p的extract()]
[u'Blahblah'],[u'Bluhbluh'],[u'Bliblih']
>>>进口经营者
>>>map(operator.itemgetter(0),[p.xpath(“string()”).extract(),用于selector.xpath('//div/p')]中的p)
[u'Blahblah',u'Bluhbluh',u'Bliblih']
>>>
你很接近!
你所要做的就是将后代或自我的文本视为一种属性,而不是将其作为一种属性。
[]用于与属性“对话”,在您的例子中,p的属性是不存在的。我喜欢@Elvila Gandelman的解决方案 但是,还有另一种笨拙但更直观的方式:
response.xpath('(//div/p | //div/p/a | //div/p/a/span)/text()').extract()
['Blahblah', 'Bluhbluh', 'Bliblih']
如果要从给定元素获取所有
text
节点,则需要以下XPath:
//div/p//text()
因此,您的代码将如下所示:
<div>
<p>Blahblah</p>
<p><a>Bluhbluh</a></p>
<p><a><span>Bliblih</span></a></p>
</div>
text_array = selector.xpath('//div/p//text()').extract()
有趣的是,
selector.css('divp::text').extract()
如果您更喜欢使用css
而不是xpath