代理池要求
- 多站抓取,异步检测
- 定时筛选,持续更新
- 提供接口,易于提取
代理池架构
代理池架构- 获取器: 从各大网站上获取代理
- 过滤器: 筛选获取器中获取的代理,保留可用代理,剔除不可用代理
- 代理队列:将获取器中的可能代理插入代理队列备用
- 定时检测器:定时从代理队列中取出一定数量的代理进行检测,重复过滤器作用,并将可用的代理放回代理队列,保证代理队列总有可能的代理
- API: 可以用可用代理从数据库取出内嵌至网页,通过接口获取代理内容的ip和端口
代理池示例讲解
地址
https://github.com/Germey/ProxyPool.git
代码结构图项目结构图
概述 :
- examples: 运行示例
- proxypool:具体实现代码
- run.py:运行入口文件
- setup.py:安装文件
各模块功能
-
getter.py 爬虫模块
- class proxypool.getter.FreeProxyGetter
爬虫类,用于抓取代理源网站的代理,用户可复写和补充抓取规则。
- class proxypool.getter.FreeProxyGetter
-
schedule.py 调度器模块
-
class proxypool.schedule.ValidityTester
异步检测类,可以对给定的代理的可用性进行异步检测。 -
class proxypool.schedule.PoolAdder
代理添加器,用来触发爬虫模块,对代理池内的代理进行补充,代理池代理数达到阈值时停止工作。 -
class proxypool.schedule.Schedule
代理池启动类,运行RUN函数时,会创建两个进程,负责对代理池内容的增加和更新。
-
-
db.py Redis 数据库连接模块
- class proxypool.db.RedisClient
数据库操作类,维持与Redis的连接和对数据库的增删查该,
- class proxypool.db.RedisClient
-
error.py 异常模块
-
class proxypool.error.ResourceDepletionError
资源枯竭异常,如果从所有抓取网站都抓不到可用的代理资源, 则抛出此异常。 -
class proxypool.error.PoolEmptyError
代理池空异常,如果代理池长时间为空,则抛出此异常。
-
-
api.py API模块
启动一个Web服务器,使用Flask实现,对外提供代理的获取功能。 -
utils.py 工具箱
-
setting.py 设置
网友评论