什么是代理池?
代理池就是由代理IP组成的池子,可以提供多个稳定可用的代理IP
为什么要实现代理池?
我们在做爬虫的时候,最常见的一种反爬虫手段就是ip反爬,也就是当同一个ip访问这个网站的次数过多,就会限制这个ip的访问。如何解决这个问题呢?就是经常换ip,使用dialingip就是其中一个比较常用的方案。免费的代理都是不稳定的,可用率非常低,收费的稳定性也不是很满意,因此需要实现代理池。
开发环境
开发语言:python
开发工具:pycharm
主要技术:
requests:发送请求、获取页面数据
lxml:使用xpath从页面获取我们想要的数据
pymongo:把提取到代理ip存储到MongoDB数据库中并从中读取代理ip,给爬虫使用
flask:用于提供web服务
代理池的工作流程
用文字描述为:
代理IP采集模块->代理IP采集->检测代理IP->如果不可用直接过滤掉,如果可用,指定默认分数->存入数据库中
代理IP监测模块->从数据库中获取所有代理IP->监测代理IP->如果代理IP不可用,就把分数-1,如果分数为0则从数据库中删除,否则更新数据库,如果代理IP可用,恢复为默认分值,更新数据库
代理API模块->从数据库中寻找高可用的代理Ip给爬虫使用
代理池的模块及其作用
五大核心模块
爬虫模块:采集代理IP
从代理IP网站上采集代理IP
进行校验(获取代理响应速度,协议类型,匿名类型)
把可用代理IP存储到数据库中
代理IP的校验模块:过去指定IP的响应速度,支持的协议类型,和匿名程度。
原因:网上所标注的响应速度,协议类型和匿名类型是不准确的
使用httpbin.rog进行检测
数据库模块:实现对代理IP的增删改查操作
使用MongoDB来实现
检测模块:定时对代理池中代理IP进行检测,保证代理池中代理的可用性
从数据库中读取所有的IP
对代理IP进行逐一检测,可开启多个线程,以提高检测速度
如果代理不可用,代理分数-1.,代理分数为0,删除代理。如果检测到代理可用则恢复为满分
代理IP服务接口:提供高可用的代理Ip给爬虫使用
根据协议类型和域名获取随机的高质量代理IP
根据协议类型和域名获取多个高质量的代理IP
根据代理IP,不可用域名。告诉代理池这个代理IP在该域名下不可用,下次过去这个域名的代理IP的时候,就不会再获取这个代理IP,从而保证代理IP的高可用性
其他模块:
数据模型:domain.py
代理IP的数据模型,用于封装代理IP的相关信息,如ip,端口号,响应速度,协议类型,匿名类型,分数等。
程序启动入口:main.py
统一的启动入口
工具模块:
日志模块:用户记录日志信息
http模块:用于获取随机User-Agent的请求头
配置文件:settings.py
用于默认代理的分数,配置日志格式,文件,启动的爬虫,检验的间隔时间等。
代理池的项目结构:
也就是说按照这个结构来创建文件
Python_01_IP代理池_代理池的概述和设计及项目结构
原文:https://www.cnblogs.com/tkg1314/p/12495305.html