针对这个问题,本文详细介绍了相应的分析和解决方法,希望能帮助更多想要解决这个问题的伙伴找到更简单易行的方法。
我们都知道scrapy可以设置代理IP,但是不知道大家有没有遇到过这样的场景:
常规代理IP设置将对每个请求生效,这意味着每个请求都将使用代理。
但是有些请求根本不需要代理,所以希望在我的请求出错或者超时的时候设置代理IP。
这不仅节省了资源,而且缩短了请求时间。毕竟有些机构质量真的一言难尽。
那么,当请求超时时,我们如何使用代理IP发出新的请求呢?
很容易想到下载中间件,DowmloaderMiddleware。
请求、响应之间的挂钩用于修改请求和处理响应。
首先,我们需要捕获超时等异常请求,并在下载中间件中添加以下代码:
来自twisted . internet . error importtcptimeduerror,TimeoutError
defprocess_exception(自身、请求、异常、蜘蛛):
ifisinstance(异常,超时错误):
自我。process _ request _ back (request,spider) #代理ip机制仅在连接超时时启用。
返回请求
elifisinstance(异常,tcptimeduerror):
self.process_request_back(请求,蜘蛛)
返回请求
上述代码的功能是捕获异常请求,同时调用设置代理IP的功能,返回请求。
下面是设置IP的代码。
defprocess_request_back(自我、请求、蜘蛛):
request . meta[' proxy ']=Xun . proxy
request . header[' Proxy-Authorization ']=Xun . header
请注意,不能使用process_request()方法。如果在此方法下添加代理,则是常规的代理IP方法。
同时,当暂存中存在TimeoutError、TCPTimedOutError等异常时,可以采用以下解决方案:
主要是通过设置文件来改变。
1、降低同时请求的数量
COMPONENT _ REQUESTS=5
2、 增加超时时间
DOWNLOAD_TIMEOUT=300
00-1010 retry _ times=5划痕请求异常后如何设置代理IP的答案在此分享,希望。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/54427.html