gpt4 book ai didi

python - Xpath 中的重复结果而不是 scrapy 中的 CSS 选择器

转载 作者:太空宇宙 更新时间:2023-11-04 10:08:09 26 4
gpt4 key购买 nike

所以我正在通过 tutorial 玩 scrapy .我正在尝试抓取 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 选择器:

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 进行搜索,但这意味着绝对搜索,因此它的上下文仍然是文档的根。 .// 但是,意味着从 . 搜索 - 当前节点 - 并且此搜索的上下文将限于嵌套在 quote 下的元素>.

作为旁注,如果您希望获得完全相同的结果,您应该考虑将 * 更改为您在 CSS 搜索中使用的标签 - spandiv。在这种情况下,它没有任何区别,只是提醒 future 引用。

关于python - Xpath 中的重复结果而不是 scrapy 中的 CSS 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39819860/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com