【问题标题】:Why am I getting an empty array with (scrapy shell response.xpath())?为什么我得到一个带有 (scrapy shell response.xpath()) 的空数组?
【发布时间】:2016-06-17 09:17:26
【问题描述】:

我想知道为什么 response.xpath() 在this page 中返回一个空数组[],即使我这样做response.xpath('//div').extract()! 示例:

$ scrapy shell https://www.amazon.cn/b/2127529051
...
>>> response.xpath('//div').extract()
[]

我可以从主页获得一些结果,但我无法从许多其他页面获得任何结果。

顺便说一句,我不是在尝试爬亚马逊什么的,只是为了学习目的。

我也尝试了其他网站,但没有遇到这个问题,所以我想知道为什么。

有什么想法吗?

谢谢

【问题讨论】:

    标签: python xpath scrapy


    【解决方案1】:
    • response.xpath('\div').execute()

    • 这可能只有几个原因

      1. 用户代理:scrapy shell site name -s USER_AGENT='Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36'

      2. 您的回复为空,请尝试回复。显示200-300就可以了

      3. 站点路径错误

    这应该可以解决您的问题

    【讨论】:

      【解决方案2】:

      response.xpath('\\div').execute()

      这一行是错误的。首先,您在这里使用正斜杠而不是反斜杠。此外,execute() 不是 SelectorSelectorList 对象的方法(这些是 response.xpath() 方法返回的值)。

      试试:response.xpath("//div").extract()

      除了您的代码被破坏之外,关闭 javascript 并运行 view(response) 以准确查看您的蜘蛛所看到的内容是一个好习惯。在某些情况下,您的蜘蛛甚至可能看不到 "//div[@id='name']",因为它是用 javascript 加载的。

      【讨论】:

      • 感谢您的回复。实际上我使用的代码是正确的,尽管它不在这个问题中。我实际上使用了response.xpath("//div").extract(),我只是在匆忙填写问题时错过了这里的代码。我会试试view(response)
      • 我试过了:scrapy shell https://www.amazon.cn/b/2127529051response.xpath("//div").extract() 找到了我的 605 项目。确保您没有被阻止。查看responseview(response) 并检查response.status 以查看您是否收到200
      • 我得到了301 对应的response.status,以及一个空白页面对应的view(response)
      • @XO39 对,301 表示页面已移动到其他地方。 Scrapy 足够聪明,可以自动重定向你,除非你在你的项目中禁用了重定向中间件或其他东西。对我来说,它重定向到:https://www.amazon.cn/b?ie=UTF8&node=2127529051。不知道亚马逊为什么要这样做,但我的猜测是——它会检查你的 ip 是否来自中国,如果是,则重定向到 utf8 编码页面,而不是任何默认值。所以你需要弄清楚为什么你的scrapy或scrapy项目的重定向被禁用了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-10-05
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多