- 利用Python的aiohttp/re/beautifulsoup/tesseract等模块实现的代理IP池,并作数据持久化存储
- 1.由于之前使用的国内代理网站好多改版或者已经不再运营,所以导致之前的代码已不可用,现在新增的是国外代理网站,所以你爬取的时候可能需要科学上网。你可能有疑惑了,我需要的是代理,但是获取这些代理前提是我得有代理,这不是很矛盾吗,非也,获取的代理是在代码上使用的,可以切换和多变,而你自用的科学上网工具是为了获取国外网站的信息,且ip基本固定
- 2.添加的国外代理响应速度不够快,容易导致【[Errno 54] Connection reset by peer】等异常提示,适当放慢速度或者timeout的值设置大一点即可,视具体情况而定
- 3.新增的代理也不知道后续能使用多久,也请不要过于频繁的请求别人平台,做免费代理不易
- 4.后续大概率是不会再更新本项目了,要长期使用,免费的不太理想,可用率低且时效性差,并且大多都是透明代理而非高匿的,容易被检测到
-
本项目仅供个人开发者学习交流使用,请勿用于非法用途,否则后果自负
-
具体爬取结果根据当前使用计算机所在网络环境而定
-
抓取各大代理网站的免费代理,组建代理池,同时已自动附带主流UA(user-agent)池
-
代理有时效性,建议使用时检测代理可用性再使用,但同时建议爬取频率不要太频繁,如果因为恶意爬取将他人网站搞崩,后果自负
-
程序流程图
- 由于国内代理网站大部分已废弃,故删除并新增11个国外代理网站
- 使用aiohttp代替requests,aioredis代替redis
- 更新说明文档
- 已取消自动测试代理可用性功能,因为时效性过低,测试阶段意义不大
- 目前只有异步模式,其他模式已去掉
- 去掉无效的代理网站,修改已有的代理解析规则,新增几个国内外代理网站,目前已经几乎覆盖了国内的所有免费代理网站
- 爬取结果较之前版本有提升
- 66ip网站已更新,无论怎么设置,每次请求都只能获取6个代理,导致最终结果大大减少,可用代理减少大半,正在寻求新的代理网站并解析,有新发现的朋友也可以提交分支
- 对爬取的可用代理精准去重,保证唯一性
- 破解66ip代理网站的加密字段,较之前能达到120个以上的可用代理
-
增加更多的代理网站,以提高可用代理量
-
利用tessertact-ocr提取部分网站的数据
- requests库爬取数据时,还是无法解决访问请求时的阻塞情况,后期考虑使用aiohttp代替reqeuests
-
Python3.7
-
aiohttp
-
aioredis
-
gevent
-
lxml
-
bs4
-
json
-
ThreadPoolExecutor
-
flask
-
pytesseract
-
安装必须的库
pip install -r requirements.txt
-
config.py
- 相关配置文件,里面主要是UA,代理网站链接,测试ip的网站,可以自己扩展,根据里面已有的数据格式添加即可
-
headers.py
- 获取一个随机UA头,自动生成一个请求头
-
proxy.py
- 主要的逻辑代码,如果config文件代理网站有新增,自行定制对应的解析规则
-
main.py
- 以flask作为web服务启动文件
-
根据文字说明操作即可,分了三个方法,第一个是协程式,第二个是线程池,第三个是线程池+异步,自行选择
-
从数据库调取数据部分,分了两个方法测试代理可用性,第一个是线程池方法,第二个是线程池+异步方法,自行选择
- 因为爬取的代理网站众多,测试代理可用性也需要些时间,初次爬取代理时所耗时间平均在5-6分钟,后续取数据阶段则会很快
-
在运行之前自行安装配置redis数据库
-
在运行之前自行安装配置tesseract引擎
-
直接按proxy.py文件选择不同方法,取消相关的注释并运行proxy.py文件即可,config.py与headers.py请保证和proxy.py同在一目录下
-
web方式运行调取的是从redis数据库中取出的数据,如果redis没有数据则先爬取数据再以web方式运行
-
启动main.py文件,用flask将结果以web页面的方式返回代理池,如果希望搭建在服务器上的话则可以此方式启动
- 爬取部分:
- redis数据库结果:
- 测试代理部分:
- 将可用的重新再存入数据库:
-
支持自己添加,自己重置UA,设置请求头
-
支持自己添加需要爬取的代理IP,config.py文件里有说明,自添加爬取的代理IP之后,需要自定制对应的方法,自己设置解析网站和测试代理IP的方法
-
支持NormalProxy类自定制,自扩展方法