Python Xpath中的重复结果,而不是scrapy中的CSS选择器
所以我和scrapy一起玩了很久。我正试图刮文本,作者和标签的每一个引用中 使用CSS选择器时,如上文所述:Python Xpath中的重复结果,而不是scrapy中的CSS选择器,python,xpath,css-selectors,scrapy,Python,Xpath,Css Selectors,Scrapy,所以我和scrapy一起玩了很久。我正试图刮文本,作者和标签的每一个引用中 使用CSS选择器时,如上文所述: for quote in response.css('div.quote'): print quote.css('span.text::text').extract() print quote.css('span small::text').extract() print quote.css('div.tags a.tag::text').extract() 我
for quote in response.css('div.quote'):
print quote.css('span.text::text').extract()
print quote.css('span small::text').extract()
print quote.css('div.tags a.tag::text').extract()
我得到了期望的结果(即:打印每一篇文章、作者和引用一次)。
但一旦使用Xpath选择器,如下所示:
for quote in response.xpath("//*[@class='quote']"):
print quote.xpath("//*[@class='text']/text()").extract()
print quote.xpath("//*[@class='author']/text()").extract()
print quote.xpath("//*[@class='tag']/text()").extract()
我得到了重复的结果
我仍然找不到为什么这两种方法之间会有如此大的差异。尝试
/
而不是/
进行相对搜索,例如
print quote.xpath(“./*[@class='text']/text()”).extract()
当您使用/
时,尽管您是从中进行搜索,但这意味着绝对搜索,因此其上下文仍然是文档的根/
但是,这意味着从
当前节点进行搜索,并且此搜索的上下文将限于嵌套在quote
下的元素
作为一个旁注,如果你想得到完全相同的结果,你应该考虑将<代码> */COD>更改为CSS搜索中使用的标记-<代码> SUP或<代码> DIV。在这种情况下,它没有任何区别,只是一个头部的未来参考。
尝试/
而不是/
为您的相对搜索,例如
print quote.xpath(“./*[@class='text']/text()”).extract()
当您使用/
时,尽管您是从中进行搜索,但这意味着绝对搜索,因此其上下文仍然是文档的根/
但是,这意味着从
当前节点进行搜索,并且此搜索的上下文将限于嵌套在quote
下的元素
作为一个旁注,如果你想得到完全相同的结果,你应该考虑将<代码> */COD>更改为CSS搜索中使用的标记-<代码> SUP或<代码> DIV。在这种情况下,它没有任何区别,只是一个头部,供将来参考。
当您使用//时,它将从响应中获得所有结果。如果使用//则它的作用域将限于该选择器。尝试/
而不是/
。它将解决您的问题:-)当您使用//时,它将从响应中获得所有结果。如果使用//则它的作用域将限于该选择器。尝试/
而不是/
。它将解决您的问题:-)抓得好,不知道/
的事情!接得好,我不知道/
这件事!