【问题标题】:Search for an Xpath returning results outside an element with a specified attribute in scrapy在scrapy中搜索具有指定属性的元素之外的Xpath返回结果
【发布时间】:2016-07-31 16:41:13
【问题描述】:

我正在使用 scrapy shell 来获取该站点子类别部分中的所有链接:https://www.dmoz.org/Computers/Programming/Languages/Python/

可能有更高效的 Xpath,但我想出的是:

//div[@id="subcategories-div"]/section/div/div/a/@href

据我从页面来源得知,只有一个div 元素具有[@id="subcategories-div"] 属性,因此我从那里缩小范围,直到找到链接的href。这在我在 Chrome 中搜索此 Xpath 时有效。

但是当我跑步时

response.xpath('//div[@id="subcategories-div"]/section/div/div/a/@href').extract()

在scrapy中,它返回了我正在寻找的链接,但由于某种原因,它还返回了来自//*[@id="doc"]/section[8]/div/div[2]/a的链接

为什么会发生这种情况,因为在这条路径中没有一个带有[@id="subcategories-div"] 属性的div 元素?

【问题讨论】:

  • 有趣的是,将我的 Xpath 更改为 //div[@id="subcategories-div"]/section[@class="children"]/div/div/a/@href' 为我做到了。但我想我为什么我原来的 Xpath 不起作用的问题仍然存在

标签: python html xpath scrapy


【解决方案1】:

我似乎无法在您尝试抓取的页面中找到名称为 doc 的任何 id,您可能没有设置起始 response.xpath。如果你应该改变,你会得到相同的结果吗,比如:

response.xpath('//*div[@id="subcategories-div"]/section/div/div/a/@href').extract()

【讨论】:

  • This 是 OSX 上 chrome 中的样子。我将文档 ID 装箱。此外,添加星号确实会产生相同的结果。
  • 或尝试以下 xpath : //*[@id="cat-list-content-main"]/div/a/@href').extract()
  • 您能否添加一个输出转储以获得更直观的输出图片
  • //*div 对我不起作用,所以我尝试了*//div//*/div + [@id="subcategories-div"]/section/div/div/a/@href').extract()。两者仍然产生了来自 subcategories-div 以及 //*[@id="doc"]/section[8]/div/div[2]/a 中的链接,我没有得到。
  • 我无法确定问题出在哪里,这让我难以置信:) 但至少你现在有一个工作版本
猜你喜欢
  • 2022-01-03
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
相关资源
最近更新 更多