代理池的搭建

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


刘小恺(Kyle) wechat
如有疑问可联系博主