2. 代理池的设计
目标
: 理解代理池的工作流程 以及 各个模块的作用内容介绍
- 代理池的工作流程
- 代理池的模块及其作用
- 代理池的项目结构
2.1 代理池的工作流程
- 代理池工作流程图:
- 代理池工作流程文字描述:
- 代理IP采集模块 -> 采集代理IP -> 检测代理IP ->如果不可用用, 直接过滤掉, 如果可用, 指定默认分数 -> 存入数据库中
- 代理IP检测模块 -> 从数据库中获取所有代理IP -> 检测代理IP -> 如果代理IP不可用用, 就把分数-1, 如果分数为0从数据库中删除, 否则更新数据库, 如果代理IP可用, 恢复为默认分值,更新数据库
- 代理API模块 -> 从数据库中高可用的代理IP给爬虫使用;
2.2. 代理池的模块及其作用
代理池分五大核心模块:
爬虫模块: 采集代理IP
- 从代理IP网站上采集代理IP
- 进行校验(获取代理响应速度, 协议类型, 匿名类型),
- 把可用代理IP存储到数据库中
代理IP的校验模块: 获取指定代理的响应速度, 支持的协议以及匿名程度
- 原因: 网站上所标注的响应速度,协议类型和匿名类型是不准确的
- 这里使用httpbin.org进行检测
数据库模块: 实现对代理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
- 用于默认代理的分数, 配置日志格式, 文件, 启动的爬虫, 检验的间隔时间 等.
- 数据模型:
2.3. 代理池的项目结构
-- IPProxyPool
-- core
-- db
-- __init__.py
-- mongo_pool.py
-- proxy_validate
-- __init__.py
-- httpbin_validator.py
-- proxy_spiders
-- __init__.py
-- base_spider.py
-- proxy_spiders.py
-- run_spiders.py
-- proxy_test.py
-- proxy_api.py
-- domain.py
-- utils
-- __init__.py
-- http.py
-- log.py
-- main.py
-- settings.py
小结
工作流程:
- 代理IP采集模块: 抓取代理IP -> 校验代理IP可用性 -> 如果可用 -> 数据库(代理池)
- 检验模块: 读取数据库的代理IP -> 校验代理IP可用性 -> 更新 或 删除代理IP
- 代理API模块: 从数据库中获取高可用代理IP, 给爬虫使用.
模块及其作用:
- 五大核心模块
- 代理IP采集模块: 采集代理IP
- 校验模块: 检测代理的可用性: 响应速度, 协议类型, 匿名程度
- 数据库模块: 对代理IP进行增删改查的操作
- 检测模块: 获取数据库中代理IP, 进行处理, 保证代理IP的可用性
- API模块: 提供爬虫或高可用代理IP 和 指定代理不可用域名的接口.
- 其他模块
- 数据模型: 用于封装代理IP信息
- main.py: 启动的统一入口
- utils: 工具模块
- http.py : 提供随机的User-Agent
- log.py : 日志模块, 用于记录日志
- settings.py: 配置文件, 用于对项目进行配置
- 五大核心模块