您的位置:首页 > 新闻资讯 >文章内容
如何用代理IP进行随机更换请求对象IP?
来源:互联网 作者:admin 时间:2019-09-19 10:52:30

  有爬虫,自然就会有反爬虫,数据爬取也不是那么容易的,你以为网站会让你那么顺利的就把他自家的数据拱手相让吗?当然是会设置一些阻拦,不过你有张良计,我有过墙梯。我们能够通过一些反反爬虫策略来帮助我们来解决问题,之前机灵代理也介绍过相关的策略,推荐阅读:使用代理IP与User Agent实现隐藏。那么,今天再给大家介绍一种策略:请求对象添加随机代理IP。


如何用代理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就会迷惑服务器监控,不会对本次请求做反爬处理了。至此,我们的爬虫就能顺顺当当的获取数据了。


  但这才只是代理的第一步。没有哪个代理是能保证百分之百成功的。付费代理也好,免费代理也好,即使是高匿代理也只不过是提高了防反爬的几率,并没有说一定会成功的。


  请求失败的解决方案有两种:


  1、多试几次,直到请求成功,不成功就报错。


  2、换一个IP试试,直到换成请求成功的代理。对代理质量要求必须高。如果代理池质量很差,项目就会陷入死循环中。


  解决逻辑是: 设置重试次数,达到指定次数就换IP。


  幸运的是Scrapy框架中自带了处理失败请求的中间件RetryMiddleware。


  注释的部分是添加的加入代理的逻辑,需要继承RetryMiddleware之后再重写。


  在settings中设置最大重试次数以及需要进行重试的异常状态码列表。


  关闭Scrapy自带的RetryMiddleware中间件,开启自定义的Retry中间件。


  启动项目测试。遇到失败的请求会重新发送,超过最大重试次数以后返回一个空的数据。


  如果你正在使用代理IP开展爬虫,不妨试试这个反反爬虫策略能否奏效。


相关文章内容简介
推荐阅读
  • 25 2019-07
    为什么高匿名代理IP难被检测到?

    为什么高匿名代理IP难被检测到?很多人使用代理IP都是为了隐藏真实的IP,不过有些代理IP是隐藏不了,很容易被识别,因此大家最喜欢使用高匿名代理IP,这是为什么?

  • 23 2019-02
    【Python入门】一些学习Python的技巧

    学习Python相对于其他语言来说是简单许多,而且Python使用非常灵活,适用的范围比较广,很多程序都会选择去学下Python。今天小编为大家整理了一些学习Python的技巧,可以帮助新手快速的了解。

  • 28 2019-04
    爬虫借用代理IP获取到薪资信息

    爬虫借用代理IP获取到薪资信息,为什么要这么麻烦呢?这是因为这些数据,网站并不想随便给你爬取,但如果你想知道一个比较准的结果,那么收集大量信息再分析,这结果无疑是更加的准确

  • 18 2019-03
    动不动就上亿的播放量,这些数据是使用代理IP刷的吗?

    大家对于刷流量有没有什么概念呢?很多行业都存在刷流量的情况,这数据造假大家也不少见的,比如影视行业动不动就上亿的播放量。

  • 08 2019-11
    线程IP池的使用

    线程IP池要怎么在手机上使用?机灵代理今天来给大家介绍一下这种便捷的使用方式,可以广泛用在手机群控系统上,可以节省很多时间。

  • 23 2019-05
    租用最新的https代理

    租用最新的https代理,其实在国内的https代理ip平台的市场上,你们只要稍加了解就会发现一个共同的问题,那就是收费非常高,因此平台并不适合大众使用。那究竟有没有解决这个问题的方法呢

在线咨询
大客户经理
大客户经理
1829380381
13316264505

大客户经理微信

微信公众号

微信公众号

回到顶部