ProxyPool – 自动化代理池,爬取代理IP并进行测速筛选
- 发表于
- 安全工具
ProxyPool介绍
ProxyPool是一个小巧的代理ip抓取+评估+存储+展示的一体化的工具,可自动化的搜集检测可用代理并进行评分,并添加了web展示和API接口。可视为小型的代理池。
ProxyPool功能
- 每天从多个代理ip网站上抓下最新高匿ip数据。
- 经过筛选后的ip将存入数据库。
- 存入数据库的ip每天也要经过测试,存在剔除、评分机制,多次不合格的ip将被删除,每个ip都被评分,我们最终可以按得分排名获得稳定、低响应时间的优质ip。
ProxyPool安装
1 |
$ git clone https://github.com/TideSec/Proxy_Pool |
mysql创建数据库proxy,导入proxy.sql,include/config.inc.php中修改数据库密码。
安装python2依赖库
1 2 3 |
pip install lxml pip install requests pip install pymysql |
在py_proxy_task/config.py文件中配置数据库连接信息及其他参数。
ProxyPool使用
在py_proxy_task目录下有proxy_get.py
和proxy_check.py
两个程序,前者负责每天抓ip存进数据库,后者负责数据库中ip的清理和评估。
1 2 |
$ python proxy_get.py $ python proxy_check.py |
之后按默认配置,这两个程序每天分别执行抓取和评估工作,放服务器上长期运行即可。
ProxyPool使用代理Demo
python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# 访问数据库拿到代理 ip_list = [] try: cursor.execute('SELECT content FROM %s' % cfg.TABLE_NAME) result = cursor.fetchall() for i in result: ip_list.append(i[0]) except Exception as e: print e finally: cursor.close() conn.close() # 利用代理抓取豆瓣页面 for i in ip_list: proxy = {'http': 'http://'+i} url = "https://www.douban.com/" r = requests.get(url, proxies=proxy, timeout=4) print r.text |
详见crawl_demo.py。
ProxyPool参数设置
在py_proxy_task/config.py文件可进行代理评估参数的设置。
1 2 3 4 |
USELESS_TIME = 4 # 最大失效次数 SUCCESS_RATE = 0.8 TIME_OUT_PENALTY = 10 # 超时惩罚时间 CHECK_TIME_INTERVAL = 24*3600 # 每天更新一次 |
除数据库配置参数外,主要用到的几个参数说明如下:
USELESS_TIME
和SUCCESS_RATE
是配合使用的,当某个ip
的USELESS_TIME < 4 && SUCCESS_RATE < 0.8
时(同时兼顾到ip短期和长期的检测表现),则剔除该ip。TIME_OUT_PENALTY
, 当某个ip在某次检测时失效,而又没有达到上一条的条件时(比如检测了100次后第一次出现超时),设置一个response_time
的惩罚项,此处为10秒。CHECK_TIME_INTERVAL
, 检测周期。此处设置为每隔12小时检测一次数据库里每一个ip的可用性。
ProxyPool策略
- 每天如下5个代理ip网站上抓下最新高匿ip数据:
- mimi
- 66ip
- xici
- cn-proxy
- kuaidaili
- N轮筛选
- 收集到的ip集合将经过N轮,间隔为t的连接测试,对于每一个ip,必须全部通过这N轮测试才能最终进入数据库。如果当天进入数据库的ip较少,则暂停一段时间(一天)再抓。
- 数据库中ip评价准则
- 检测过程中累计超时次数>
USELESS_TIME
&&成功率<SUCCESS_RATE
就被剔除。score = (success_rate + test_times / 500) / avg_response_time
原来的考虑是score = success_rate / avg_response_time
, 即:评分=成功率/平均响应时间, 考虑到检测合格过100次的老ip比新ip更有价值,检测次数也被引入评分。
- 检测过程中累计超时次数>
代理池是我们项目中常见的需求,自己维护代理池可省下一些费用,但需投入更多的维护成本。
原文连接:ProxyPool – 自动化代理池,爬取代理IP并进行测速筛选
所有媒体,可在保留署名、
原文连接
的情况下转载,若非则不得使用我方内容。