温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何在scrapy请求异常之后再设置代理IP

发布时间:2021-10-28 18:46:31 阅读:214 作者:柒染 栏目:大数据
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

如何在scrapy请求异常之后再设置代理IP,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

我们都知道 scrapy 可以设置代理 IP,但是不知道大家有没有遇到这样一个场景:

常规的代理 IP 设置,会对每个请求都生效,也就是说每个请求都会去使用代理

但是有些请求根本不需要代理,我希望当我的请求出现错误或超时的时候再去设置代理 IP

这样既节省了资源,又缩短了请求的时间,毕竟有些代理质量真的一言难尽

那么怎么才能让它请求超时的时候,再使用代理 IP 进行重新请求呢?

很容易就想到下载中间件,DowmloaderMiddleware

一个介于 request, response 中间的钩子,用于修改 request 和处理 response

首先我们需要捕获超时等异常的请求,在下载中间件中添加如下代码:

from twisted.internet.error import TCPTimedOutError, TimeoutErrordef process_exception(self, request, exception, spider):        if isinstance(exception, TimeoutError):            self.process_request_back(request, spider)  # 连接超时才启用代理ip机制            return request        elif isinstance(exception, TCPTimedOutError):            self.process_request_back(request, spider)            return request
 

以上代码的作用就是捕获异常请求,同时调用设置代理 IP 的函数,并返回该请求

下面的设置 IP 的代码

def process_request_back(self, request, spider):        request.meta["proxy"] = xun.proxy        request.headers["Proxy-Authorization"] = xun.headers
 

注意不能使用 process_request() 方法, 如果代理添加在该方法下,就是常规的代理 IP 方法

同时对于 scrapy 出现 TimeoutError,TCPTimedOutError 等异常的时候,还可以通过以下几种方案来解决:

主要通过设置文件来更改

 

1、降低同时请求的数量

CONCURRENT_REQUESTS = 5
     

2、 增加超时时间

DOWNLOAD_TIMEOUT = 300
     

3、 增加异常重试次数

RETRY_TIMES = 5
    

关于如何在scrapy请求异常之后再设置代理IP问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

原文链接:https://my.oschina.net/u/4440337/blog/4689787

AI

开发者交流群×