最近使用scrapy爬虫的过程中遇到response 403的问题,由于服务器拒绝,需要重新retry。查了很久,翻看文档终于明白scrapy自带的retry如何使用。
配置setting.py,在网上可以随意查找到,设置启动retry机制,:
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.retry.RetryMiddleware': 550,
}
RETRY_ENABLE=True
RETRY_TIMES=100
RETRY_HTTP_CODECS = [403]
HTTPERROR_ALLOWED_CODES = [403] #当遇到403的时候爬虫脚本不退出
设置完之后重新跑脚本发现好像没有任何反应,查找文档发现,需要返回新的request
在parse中添加:
def parse(self, response):
if response.status == 403:
time.sleep(50)
new_request_or_none = get_retry_request(
response.request,
spider=self,
reason='empty',
)
return new_request_or_none
重新启动,当遇到403的时候就会有反应了:
?
但其实目前依然没有解决403的问题,本来以为服务器拒绝之后只要delay一段时间,再重新retry获取能拿到数据,现在看起来不行,retry服务器依然会拒绝。后面解决之后更新。。。
?
|