在scrapy中,Xpath中的重复结果不包含CSS选择器

2024-05-21 06:05:20 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我在和刮胡子玩了tutorial。我正在尝试获取companion website中每个引用的文本、作者和标记 使用这里提到的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()

我得到了想要的结果(即:每一篇文章,作者和引文打印一次)。 但是像这样使用Xpath选择器:

^{pr2}$

我有重复的结果!在

我还是不明白为什么两者之间有这么大的区别。在


Tags: text标记文本div选择器extract作者website
2条回答

使用//时,它将从响应中获取所有结果。如果使用//则其作用域将被限制为该选择器。尝试.//而不是//。它将解决您的问题:-)

尝试使用.//而不是//进行相关搜索,例如

print quote.xpath(".//*[@class='text']/text()").extract()

当您使用//时,尽管您是从quote进行搜索,但这意味着绝对搜索,因此其上下文仍然是文档的根。.//但是,意味着从.搜索当前节点,并且此搜索的上下文将限于quote下嵌套的元素。在

另外,如果您希望得到完全相同的结果,您应该考虑将*更改为您在CSS搜索中使用的标记-span或{}。在这种情况下,这没有任何区别,只是一个头部,以备将来参考。在

相关问题 更多 >