/ img /..// text()和// text()之间的区别

时间:2015-01-09 08:41:54

标签: xpath scrapy lxml lxml.html

我正在使用Scrapy和lxml树来整理html树。

我注意到这两个xpath表达式之间存在差异。我的印象是他们可以互换。有人可以解释一下我的区别吗?

response.xpath('/html/body/div/table/tr/td/table/tr/td/table/tr/td/table/tr/td/table/tr/td/a/img/..//text()').extract()

response.xpath('/html/body/div/table/tr/td/table/tr/td/table/tr/td/table/tr/td/table/tr/td/a//text()').extract()

1 个答案:

答案 0 :(得分:3)

a/img/..//text()a//text()之间的区别在于,第一个将从a元素返回文本节点 ONLY ,其中img个元素作为子元素,而第二个将从a元素返回文本节点,而不管它们是否有img元素作为子元素。

换句话说,a/img/..//text()同样可以写成a[img]//text();将其与a//text()进行比较。