【问题标题】:How to resolve 502 response code in Scrapy request?如何解决 Scrapy 请求中的 502 响应代码?
【发布时间】:2020-11-04 15:03:39
【问题描述】:

我创建了一个蜘蛛,它使用 Scrapy 从 Yelp 中抓取数据。所有请求都通过 Crawlera 代理。 Spider 获取要抓取的 URL,发送请求并抓取数据。这一直很好,直到前几天我开始收到 502 None 响应。出现 502 None 响应 执行此行后:

r = self.req_session.get(url, proxies=self.proxies, verify='../secret/crawlera-ca.crt').text

回溯:

2020-11-04 14:27:55 [urllib3.connectionpool] DEBUG: https://www.yelp.com:443 "GET /biz/a-dog-in-motion-arcadia HTTP/1.1" 502 None

因此,蜘蛛似乎无法访问该 URL,因为连接已关闭。

我在 Scrapy 和 Crawlera 文档中检查了 502 的含义,它指的是连接被拒绝、关闭、域不可用和类似的事情。 我已经调试了与问题发生位置相关的代码,并且一切都是最新的。

如果有人对此有想法或知识,我很乐意听到,因为我被困住了。这里实际上可能是什么问题?

注意:当我在浏览器中打开 Yelp URL 时,它们会正常工作。

【问题讨论】:

  • 您是否考虑过在 Scrapy 和 Crawlera 中禁用 cookie?
  • 那行得通。我为 Crawlera 添加了一些以前没有的附加标题。谢谢。

标签: scrapy request response crawlera


【解决方案1】:

网站从您的请求标头中看出您是“爬虫”而不是人类用户。

您应该在请求中发送不同的标头,以便被抓取的网站认为您正在使用常规浏览器浏览。

更多信息,请参考the scrapy documentation

【讨论】:

  • 确实,这就是问题所在。我正在发送常规的浏览器标头,但由于某种原因,它们不再足够了。添加这些解决了问题:DEFAULT_REQUEST_HEADERS = {"X-Crawlera-Profile": "desktop","X-Crawlera-Cookies": "disable",}
【解决方案2】:

某些页面不适用于某些国家/地区,因此建议使用代理。我尝试输入url,连接成功。

2020-11-05 02:50:40 [scrapy.extensions.telnet] DEBUG: Telnet console listening on 127.0.0.1:6024
2020-11-05 02:50:40 [scrapy.core.engine] INFO: Spider opened
2020-11-05 02:50:43 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.yelp.com/biz/a-dog-in-motion-arcadia> (referer: None)```

【讨论】:

  • 这很好,虽然我使用代理但仍然得到 502。
猜你喜欢
  • 1970-01-01
  • 2019-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-23
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
相关资源
最近更新 更多