代理池的介绍
- 应用模块
- aiohttp、requests、redis-py、pyquery、Flask
- 代理池模块
- 存储模块、获取代理模块、检测模块、接口模块、调度模块
- 各模块的功能
- 存储模块
- 负责存储抓取下来的代理,并对代理去重
- 获取模块
- 需要定时抓取代理,代理可以是免费抓取的代理,也可以是调用付费代理商购买的代理
- 检测模块
- 需要定时检测数据库中的代理,对效果不好的代理及时进行删除
- 接口模块
- 需要用API来提供对外的服务接口。外界通过访问接口的方式来获取代理
- 调度模块
- 调度前面的所有模块,使之协调工作
各模块的设计
- 存储模块
- 使用Redis有序集合,集合的每一个元素都是不重复的
- 每个元素都有一个分数字段,分数是可以重复的,数值小的排在前面,数值大的排在后面
- 每个代理100分为最高分,表示可用,0分为最低分,代表最不可用,自动进行移除
- 获取随机代理的逻辑,先随机获取最高分代理,如果不存在最高分代理,按照排名获取
- 获取模块
- 从各代理商处爬取或购买调用接口获得代理
- 调用存储模块,向数据库中添加代理,初始的分数是10
- 检测模块
- 不断的检测代理的可用性(检测的目标网站可以自定义),进行代理的加分和减分或者移除
- 检测到代理可用,分数立即置为100分,检测到代理请求失败,则减少一分
- 接口模块
- 定义接口模块的随机获取代理,统计代理数量等方法
- 调度模块
- 通过配置每个模块的开关来设置调度模块的启动功能
- 通过多进程启动每一个模块
代码示例