前言:

当分布式爬虫使用代理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_keyclass HeaderMiddleware(object):def __init__(self):r = init_redis()def process_request(self,request,spider):ip = r.rpop(list_key)if ip:proxy = 'http://'+ ip#print proxyrequest.meta['proxy'] = proxyelse:print 'middleware:没有IP了'

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

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

模块获取地址:Github

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

  1. 爬虫单个ip代理设置_爬虫怎么设置代理ip池?

    网络技术现在是如此发达,用户换ip再也不用自己手动来,很多ip代理都是傻瓜式操作,智能完成切换,完全不用使用者操心. 像在我们在利用网络爬虫开展数据采集,遇到爬取频率过高.频次过多的问题,会碰到ip被 ...

  2. 使用爬虫实现代理IP池之放弃篇

    2019独角兽企业重金招聘Python工程师标准>>> 啥叫代理IP以及代理IP池 概念上的东西网上搜索一下就好了,这里简单科普一下(大部分会读这篇文章的人,基本是不需要我来科普的) ...

  3. 解析python网络爬虫pdf 黑马程序员_正版 解析Python网络爬虫 核心技术 Scrapy框架 分布式爬虫 黑马程序员 Python应用编程丛书 中国铁道出版社...

    商品参数 书名:Python应用编程丛书:解析Python网络爬虫:核心技术.Scrapy框架.分布式爬虫 定价:52.00元 作者:[中国]黑马程序员 出版社:中国铁道出版社 出版日期:2018-0 ...

  4. 构建一个给爬虫使用的代理IP池

    做网络爬虫时,一般对代理IP的需求量比较大.因为在爬取网站信息的过程中,很多网站做了反爬虫策略,可能会对每个IP做频次控制.这样我们在爬取网站时就需要很多代理IP. 代理IP的获取,可以从以下几个途径 ...

  5. Python爬虫-代理ip池建立

    代理IP池建立 前言 之前提到过urllib和requests的利用代理ip的访问方式 . https://blog.csdn.net/zhouchen1998/article/details/813 ...

  6. 【python】爬虫入门:代理IP池的使用、文件的写入与网易云爬取时的注意事项

    一.概述 在两天前实现利用爬虫爬取网易云音乐用户的各类公开信息之后,我对现有爬虫进行了功能上的增加.主要有: ①.使用代理IP池防止IP被封: ②.将爬取用户的听歌记录.歌单.关注.粉丝这四类数据的代 ...

  7. Python爬虫伪装,请求头User-Agent池,和代理IP池搭建使用

    一.前言 在使用爬虫的时候,很多网站都有一定的反爬措施,甚至在爬取大量的数据或者频繁地访问该网站多次时还可能面临ip被禁,所以这个时候我们通常就可以找一些代理ip,和不用的浏览器来继续爬虫测试.下面就 ...

  8. 利用多线程爬虫搭建代理ip池的两种方法(含源码)

    搭建爬虫代理ip池的两种方法(含源码) 前言 一.ip池是什么? 二.爬取原理 三.使用步骤 方法一 爬取网站https://www.kuaidaili.com/ 验证 存取到mysql 方法二 爬取 ...

  9. 爬虫采集自己构建代理ip池有什么优势?

    为何一些爬虫采集的专业技术人员购买了代理ip还会继续自己构建一个ip池,自己构建ip池有什么优势? (1)可无限制的调用API获取代理ip; 购买收费的代理ip,绝大多数都会提供API链接接口,客户利 ...

最新文章

  1. 树莓派:django,uwsgi,nginx安装与设置
  2. 射影几何笔记5:齐次坐标(Homogeneous coordinates)
  3. C++实现欧拉的totient 函数(Euler’s totient function)(附完整源码)
  4. vs文件上传失败--超过最大字符限制
  5. lucene 增加相关性_事务性Lucene
  6. python手机编译器可以干什么_世界上最好的Python编辑器是什么?
  7. hmailserver php,hmailserver关于afterlogic webmail php版本下的用户密码修改功能
  8. android 调用系统自带文件管理器_编写使用Android 系统自带的文字转语音代码
  9. 使用case语句的3个诀窍
  10. java更改reader字体颜色,Java 修改 文件内容 and BufferedReader 乱码问题
  11. 分享一个IIS日志分析工具-LogParse
  12. 非华为电脑实现多屏协同、一碰传
  13. php strtotime技巧,获取前几天、前几周、后几天、后几周,本月开始和本月结束时间
  14. oracle怎么查询同名学生,数据库:SQL“查询同名同姓学生名单,并统计同名人数”延伸...
  15. 百年辉煌师心向党 · 德高道厚幸福敬中——2021年石家庄敬业中学教师节庆祝大会
  16. 铃铛子训练营 | 我的感悟(二)
  17. C++程序设计基础 小母牛问题
  18. 防火墙和NAT基础学习
  19. 在VMware上安装kali(7z格式)并配置中文环境
  20. 计算机组成原理流水线ppt,[计算机组成原理第讲流水线.ppt

热门文章

  1. 杭漂5年前端感受-白驹过隙,人生如梦
  2. excel转制定格式
  3. Tableau基础 | 如何应对Excel的格式
  4. 快速对帝国竞争算法ICA的了解
  5. uniapp下载文件到手机自定义目录实现
  6. java地铁最短距离_地铁线路最短路径问题
  7. 人脸识别闸机python_Python 40行代码实现人脸识别功能
  8. Cris 的Python笔记(十三):异常和文件处理
  9. 网易云容器服务微服务化实践—微服务测试及镜像化提测全流程实践
  10. 60个非常实用的CSS代码