2014-10-10 95 views
2

大家好,我想在scrapy使用XPath从一个HTML块提取所有文字提取文本的XPath scrapy

比方说,我们有这样的块:

<div> 
    <p>Blahblah</p> 
    <p><a>Bluhbluh</a></p> 
    <p><a><span>Bliblih</span></a></p> 
</div> 

我想提取文字为[“布拉布拉”,“Bluhbluh”,“Blihblih”]。我希望xpath递归查找div节点中的文本。 我听说过尝试过://div/p[descendant-or-self::*]/text()但它不提取嵌套元素。

干杯! 勒布

回答

3

您可以使用XPath的string()功能各p元素:

>>> 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'] 
>>> 
2
>>> selector.xpath('//div/p/descendant-or-self::*/text()').extract() 
[u'Blahblah', u'Bluhbluh', u'Bliblih'] 

你是接近! 你所要做的只是把后代或自我的文本看作是一个属性。 []用于“说话”属性,在您的情况下,p的属性不存在。