您的位置:首页 > 新闻资讯 >文章内容
如何用代理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开展爬虫,不妨试试这个反反爬虫策略能否奏效。


相关文章内容简介
推荐阅读
  • 04 2019-12
    Linux虚拟机如何设置静态IP?

    使用过代理IP​的用户,可能会对静态IP以及动态IP比较了解了,它们可以分别用在不同的场景中,用户可以按照自己的使用需求在机灵代理进行选购。

  • 25 2019-12
    服务器如何识别代理IP​?

    服务器如何识别代理IP​?从服务器的角度出发,你可能并不像有爬虫每天,甚至每分钟使用不同的代理向你发送海量的请求。这时候你就需要一个能够识别代理机制。这点很难,尤其是客户端使

  • 22 2020-07
    免费代理IP不推荐使用

    大数据时代已经到来,代理IP也得到了迅速发展。打开百度,输入"代理IP"关键字,到处都可以看到大量的代理IP资源,实际的操作会发现不稳定是这些IP的共同问题,经常遇到的只是IP,还没有使

  • 27 2019-03
    IP隐藏的功能是怎样设定的?

    现在生活中很多网站难免会遇到因为网络限制而不能够访问的情况,那么我们怎样才能够设置一定的功能,让这些具有限制的IP重新获得允许呢?其实这都是IP隐藏功能的原因,主要大家通过代

  • 16 2020-04
    IP代理软件怎么设置host

    host属性是一个可读可写的字符串,可设置或返回当前URL的主机名称和端口号。当我们在浏览器输入一个域名访问网站时,本机设置的DNS服务器会先将域名解析,若本机网络中没有设置DNS,则是

  • 22 2019-04
    代理IP检测:100个IP能用的仅有10个

    大家知道代理IP检测方法吗?今天小编就来讲一讲代理IP检测问题,或许很多人都不知道为什么要对代理IP进行检测的,这是有原因的。要知道我们在网络中抓到的代理IP数量很大,但能用的往往

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

大客户经理微信

微信公众号

微信公众号

回到顶部