本篇记录一下IPSearch的改进版本以及实时代理池的实现思路。
项目已上传到GitHub:https://github.com/dataformydream/IPsearch
本文为IPSearch最新版本:IPSearch.py,用来参考实现思路和学习总结。
申明:本文和相关代码只做学习用途,请合理合法使用。
目录
一、实现功能
所有功能列出如下:
1、将所有功能封装在IPSearch类中,方便调用。
2、内置封装好的requests.get函数,实现随机IP,随机headers,可添加headers参数(支持函数引用)
3、本地json备份导入和导出
4、检测IP和IP列表对URL的有效性,并返回筛选结果
5、同时保存可用(proxies)和已失效(del_proxies)的IP池,内部支持http和https两种类型
6、代理池的动态更新,和扫描检测功能(多线程、进度条输出优化)
7、支持西刺、西拉、免费代理库三个网站的遍历页面爬取和提前筛选
8、可统计ip数、交互信息
9、IP池的实时维护,小于设定值自动补充新的可用IP(创建了一个实时监测的子线程)
二、思路和实现
1、大致思路
第一步:
实现随机请求头,随机IP的请求函数(考虑本地没有ip的情况和如何保证一定能成功爬取,同时实时更新IP池)
第二步:
分别实现单独获取各代理网站IP的爬取函数
第三步:
本地json文件的格式规定和IP池的格式(字典格式,包含http和https两个列表键值对),导入导出函数
第四步:
IP和IP列表的测试函数(多线程实现,同时考虑输出精简、支持全部扫描、输出成功和失败IP列表)
第五步:
实现更新函数,功能有去重、测试、添加、重新检测并覆盖IP池(调用前面函数做封装)、本地备份刷新
第六步:
实时子进程爬取IP函数的实现(重新定义一个线程类并封装,实质为生产者模型,死循环监测规定的IP数,小于时补充,满足时休眠,利用队列实现退出功能,交互输出当前可用IP数)