最近在学崔庆才老师的课,于是使用了他的代理池。真别说,人家的项目还挺好用。这是项目地址:https://github.com/Python3WebSpider/ProxyPool
一、代理池的要求
1、多站抓取,异步检测:getter
功能
首先要获取:getter
从各大网站爬取他们收集的代理,判断符合格式后,就添加进代理池
2、定时筛选,持续更新 :tester
功能
过滤器tester
将数据筛选,对可用代理和不可用代理打分以及剔除
3、提供接口,易于服务:server
功能
服务器server
将代理从代理池
二、详解
【中括号的内容为个人打算做的优化】
-
run.py
通过argparse
模块实现了只启动tester
,getter
或server
-
gettter.py
判断代理池是否已满,满了就不再获取新代理
没满就挨个运行crawlers
下的模块,获取新代理
【可以改成协程,更快点】
server.py
用flask
搭建的,目前实现了两个:/random
获取一个满分代理【如果存在】,不存在就随机取一个代理;/count
获取代理池的代理总数
【这里可以添加更多内容,首页展示,满分代理个数,不取出重复的代理等等】
tester.py
取出来一批代理和 httpbin获取到的ip比对,如果和本地ip相同或无法访问就代表代理不可用,分数-1;如果和本地ip不同就表示代理可用,设置为满分。分数为0时自动从代理池删除代理
【没必要每次都本地访问httpbin获取本地ip,而且有时httpbin不好用,不如自己搭建一个httpbin】
三、部署代理池
- 将源码放在任意目录下,安装好
python3
,然后pip install -r requirement.text
- 如果只是本地使用,就不用改
API_HOST
, 如果要支持远程访问,就得改成0.0.0.0
- 开放5555端口防火墙和安全组
四、效果展示
本地跑起来像这样:
redis里能直接看到:
可以部署在云端: