如何在Scrapy请求中解析502响应代码?

问题描述

我创建了一个蜘蛛,使用Scrapy从Yelp抓取数据。所有请求都通过Crawlera代理。 Spider会获取要抓取的URL,发送请求,然后抓取数据。直到第二天,当我开始收到“ 502无”响应时,此方法都可以正常工作。 502无响应出现 执行此行后:

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在浏览器中打开时正常工作。

解决方法

该网站从您的请求标头中看到您是“抓取者”,而不是人类用户。

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

有关更多信息,请参阅the scrapy documentation

,

某些页面在某些国家/地区不可用,因此建议使用代理。我试图输入网址,连接成功。

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)```