请求对象添加随机代理IP—反反爬策略

22 篇文章 1 订阅
15 篇文章 1 订阅

大家都知道,爬虫采集数据过程经常会被各种限制,这种限制叫反爬虫机制,最常见的就是根据ip来判断,来限制,当一个ip频繁进行访问就会被限制。我们可以通过使用51代理ip来切换ip突破限制,这样爬虫就会顺利,效率自然提高了
 
  爬虫的目的就是为了模拟点击浏览器操作的行为,在反反爬策略中,最基础的就是更换User-Agent。User-Agent的作用是方便服务器识别,当前请求对象的身份信息。
  
  无法从身份属性来识别是否是机器操作,网站服务器只能通过其他信息来辨别,区别机器和正常用户。识别IP访问频率,判断cookie信息,添加验证码操作等都是常见的网站反爬操作。

今天,主要学习的就是突破网站根据IP访问频率的反反爬策略:随机更换请求对象的IP信息。
  Scrapy中,更换请求对象的IP信息非常的方便,只需要在request对象进入下载器之前,修改request对象的参数信息。
  斜体样式
  所以我们需要在下载器中间件Download_middleware中自定义一个下载器中间件ProxiesMiddleware,在process_request()函数中修改request对象信息。
  其中PROXIES_LIST是构建的代理列表。
  process_request的参数分别是request当前请求对象,spider当前的爬虫对象。
  返回None,Scrapy将继续处理该Request;
  返回Request对象时,这个Reuqest会重新放到调度队列里,更低优先级的process_reqyest()函数不会执行;
  返回Response对象时,直接将Response对象发送给Spider来处理。
  现在每次发送一次请求,请求对象的IP信息就会从配置中的代理IP池中随机挑选一个。不同的IP就会迷惑服务器监控,不会对本次请求做反爬处理了。至此,我们的爬虫就能顺顺当当的获取数据了。好了,本期结束,大家散会吧。
  NO!NO!NO!这还远远不够,这才只是代理的第一步。没有哪个代理是能保证百分之百成功的。付费代理也好,免费代理也好,即使是高匿代理也只不过是提高了防反爬的几率,并没有说一定会成功的。
  请求失败的解决方案有两种:
  1.多试几次,直到请求成功,不成功就报错。
  2.换一个IP试试,直到换成请求成功的代理。对代理质量要求必须高。如果代理池质量很差,项目就会陷入死循环中。
  解决逻辑是:设置重试次数,达到指定次数就换IP。
  幸运的是Scrapy框架中自带了处理失败请求的中间件RetryMiddleware。
  注释的部分是添加的加入代理的逻辑,需要继承RetryMiddleware之后再重写。
  在settings中设置最大重试次数以及需要进行重试的异常状态码列表。
  关闭Scrapy自带的RetryMiddleware中间件,开启自定义的Retry中间件。
  启动项目测试。遇到失败的请求会重新发送,超过最大重试次数以后返回一个空的数据。
  这就是我们预期的结果了,剩下的就是提高代理池的质量,就能最大程度的保证爬虫的可用性了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值