[爬虫架构] 如何在分布式爬虫架构中动态维护一个代理IP池(付费代理)

标签: 爬虫 代理
46人阅读 评论(0) 收藏 举报
分类:

前言:

    当分布式爬虫使用代理IP技术时,通过直接在爬虫程序中添加平台api接口的方式已经不能满足我们了,因为分布式的爬虫架构每秒的代理IP-URL的请求数会远远大于平台限制的请求频率,当然,对于没有限制的套餐此处不考虑,但为了爬虫能够稳定的获取代理IP,我们仍需要维护一个本地的代理IP池。

准备工作:

    需要的工具:

  • 搭建好的一台Redis服务器

思路:

    要动态维护一个代理IP池,需要实现两个必须的功能:

       1、往Redis服务中push新的IP

       2、定时监测Redis服务中代理IP池中的剩余IP数量,当少于N个时,添加M个新的IP

    可优化的功能:

       1、将使用过的IP数量单独存储在Redis服务的另一个key中

    程序需要拥有的特性:

       1、良好的可移植性

       2、模块化

       3、使用简便

使用:

       1、proxy_2_redis模块参数配置:

"""必要配置"""
#获取代理IP的url:示例为【快代理平台-开放代理-vip套餐,返回json数据】,其他平台则根据情况修改download_proxy_ip函数
proxy_url = 'http://dev.kuaidaili.com/api/getproxy/?orderid=952388528527534&num=20&b_pcchrome=1&b_pcie=1&b_pcff=1&protocol=1&method=1&an_an=1&an_ha=1&sp1=1&sp2=1&quality=1&format=json&sep=1'
#redis中代理IP池存储的key名
list_key = 'proxy_list'
#当IP池内IP数小于多少时添加新的IP
lower = 10
#redis中使用过的IP数量存储的key名
used_ip_number_key = 'used_ip_number'

       2、运行proxy_2_redis.py,输出如下:


      3、在spider中导入相关函数,获取并为spider设置代理,以下为在scrapy中的应用:

from proxy_2_redis import init_redis,list_key

class HeaderMiddleware(object):
    def process_request(self,request,spider):
        request.headers.setdefault('Referer',spider.begin_url)
        r = init_redis()
        ip = r.rpop(list_key)
        if ip:
            proxy = 'http://'+ ip
            #print proxy
            request.meta['proxy'] = proxy
        else:
            print 'middleware:没有IP了'

       4、启动Spider,查看proxy_2_redis输出日志。

提示:实际使用此模块时,需要根据爬虫对代理的请求频率动态调整lower参数和每次添加的IP数(在URL中修改),以尽量确保代理池中IP的实时性。


模块获取地址(点个star犒劳一下吧):Github


查看评论

Redis集群架构

Redis是现在使用最为广泛的NoSQL数据库技术,其自身不仅拥有着良好的操作性能,也被广泛的应用于各种集群架构的数据整合处理之中,而本课程将通过Redis的核心作用,以及单实例redis存在的问题为读者进行分析,而后重点讲解redis官方给出的集群实现方案。
  • 2017年02月12日 18:32

Python爬虫IP代理池的建立和使用

采用IP代理的方法避免短时间大量访问某网站服务器导致IP被封的情况,包括从网上抓取代理IP和端口以及验证其有效性。...
  • sinat_22594309
  • sinat_22594309
  • 2016-12-03 13:37:23
  • 9776

爬虫ip代理服务器的简要思路

爬虫有的时候会遇到被禁ip的情况,这个时候你可以找一下代理网站,抓取一下ip,来进行动态的轮询就没问题了,也可以用别人做好的第三方ip代理平台,比如说crawlera,crawlera是一个利用代理I...
  • djd1234567
  • djd1234567
  • 2016-06-23 10:45:19
  • 12842

python爬虫由浅入深15---利用Redis+Flask来维护代理池和Cookie池

Redis主要用来维护池,提供池的队列存储 关于Redis的安装与配置,可见点击打开链接 Flask来实现池的接口,用它来从中拿出内容 代理池: 作用:用来伪装IP,更好地利用代理资源来应对站...
  • rytyy
  • rytyy
  • 2017-10-14 13:04:10
  • 1343

Java网络爬虫(七)--实现定时爬取与IP代理池

注:对代码及思路进行了改进—Java网络爬虫(十一)–重构定时爬取以及IP代理池(多线程+Redis+代码优化) 定点爬取 当我们需要对金融行业的股票信息进行爬取的时候,由于股票的价格是一直在...
  • championhengyi
  • championhengyi
  • 2017-04-27 20:22:21
  • 8263

分布式多爬虫系统——架构设计

前言:在爬虫的开发过程中,有些业务场景需要同时抓取几百个甚至上千个网站,此时就需要一个支持多爬虫的框架。在设计时应该要注意以下几点: 代码复用,功能模块化。如果针对每个网站都写一个完整的爬虫,那其中必...
  • Bone_ACE
  • Bone_ACE
  • 2017-02-12 23:52:06
  • 11916

爬虫代理池完全教程

相关介绍 在编写爬虫的过程中我们经常会遇到需要代理的情况,代理可以到网上找免费的也可以用付费的。付费的使用网站提供的API就可以轻松获取代理,免费的就只能到处找然后采集而且代理质量还不高(付费的也不...
  • sinat_34200786
  • sinat_34200786
  • 2018-03-05 21:53:07
  • 309

java代理实现爬取代理IP

使用java编写的,获取代理IP的java类,依赖很简单,就是jsoup和fastjson,直接运行main方法即可,易于嵌套到项目中使用...
  • sdfiiiiii
  • sdfiiiiii
  • 2017-04-22 13:42:18
  • 6829

Python构建代理池

用 Python 爬取网站内容的时候,容易受到反爬虫机制的限制,而突破反爬虫机制的一个重要措施就是使用IP代理。我们可以在网络上找到许多IP代理,但稳定的IP代理成本都较高。因此利用免费代理构建自己的...
  • qq_25071449
  • qq_25071449
  • 2017-07-25 20:18:26
  • 1103

构建爬虫代理池

proxypoolproxypool是一个自动抓取免费代理并检测入库的程序,并提供开放的实时API服务:proxypool-open-WebAPI使用本项目采用python3进行开发,建议使用virt...
  • nghuyong
  • nghuyong
  • 2017-11-01 15:56:58
  • 6309
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 510
    排名: 10万+
    最新评论