一个强大到超乎你的想象的异步 IP 池项目 --async-proxy-pool
随着大型网站反扒机制的增强, 更改 IP 登陆已经成为一种最高效的方式, 为此打造一款超强 IP 池项目, 采用最新最快的 Python 技术 -- 异步(Async ). 编写了一个免费的异步爬虫代理池, 以 Python asyncio 为基础, 充分利用 Python 的异步性能, 异步处理比同步处理能提升成百上千倍的效率, 速度堪比 GO 语言.
学习 Python 中的小伙伴, 需要学习资料的话, 可以前往我的微信公众号: 速学 Python, 后台回复: 简书, 即可拿 Python 学习资料
这里有我自己整理了一套最新的 python 系统学习教程, 包括从基础的 python 脚本到 web 开发, 爬虫, 数据分析, 数据可视化, 机器学习等. 送给正在学习 python 的小伙伴! 这里是 python 学习者聚集地, 欢迎初学和进阶中的小伙伴!
项目介绍
本项目通过爬虫抓取互联网上免费代理网站的 IP, 并且进行异步检测是否可用, 如果可用就放入数据库. 定时对数据库中的代理进行维护, 然后通过 Web API 的形式供外部使用.
项目运行环境
项目使用了 sanic, 一个异步网络框架. 所以建议运行 Python 环境为 Python3.5+, 并且 sanic 不支持 Windows 系统, Windows 用户可以考虑使用 Ubuntu on Windows.
总体架构
项目主要几大模块分别是爬取模块, 存储模块, 校验模块, 调度模块, 接口模块.
爬取模块 crawler.py
负责爬取代理网站, 并将所得到的代理存入到数据库, 每个代理的初始化权值为 INIT_SCORE.
存储模块 database.py
封装了 Redis 操作的一些接口, 提供 Redis 连接池.
校验模块 validator.py
验证代理 IP 是否可用, 如果代理可用则权值 +1, 最大值为 MAX_SCORE. 不可用则权值 -1, 直至权值为 0 时将代理从数据库中删除.
调度模块 scheduler.py
负责调度爬取器和校验器的运行.
接口模块 webapi.py
使用 sanic 提供 Web API (服务器提供接口).
如何使用
安装 Redis
项目数据库使用了 Redis,Redis 是一个开源 (BSD 许可) 的, 内存中的数据结构存储系统, 它可以用作数据库, 缓存和消息中间件. 所以请确保运行环境已经正确安装了 Redis. 安装方法请参照官网指南.
项目源码
点击关注, 转发, 私信小编 "史上最强代理池", 就能免费获取强大的异步爬虫代理池项目源码.
安装依赖
$ pip install -r requirements.txt
使用 API 获取代理
运行代码后, 访问 http://127.0.0.1:5000 / 进入主页, 如果显示'Welcome', 证明成功启动.
访问 http://127.0.0.1:5000/get 可以获取一个可用代理.
也可以在程序代码中用相应的语言获取, 例如:
- import requests
- from bs4 import BeautifulSoup
- import lxml
- def get_proxy():
- r = requests.get('http://127.0.0.1:5000/get')
- proxy = BeautifulSoup(r.text, "lxml").get_text()
- return proxy
Sanic 性能测试
使用 wrk 进行服务器压力测试. 基准测试 30 秒, 使用 12 个线程, 并发 400 个 http 连接. 测试 http://127.0.0.1:3289/
- $ wrk -t12 -c400 -d30s http://127.0.0.1:3289/
- Running 30s test @ http://127.0.0.1:3289/
- 12 threads and 400 connections
- Thread Stats Avg Stdev Max +/- Stdev
- Latency 34.63ms 12.66ms 96.28ms 58.07%
- Req/Sec 0.96k 137.29 2.21k 73.29%
- 342764 requests in 30.10s, 49.69MB read
- Requests/sec: 11387.89
- Transfer/sec: 1.65MB
- Requests/sec: 11387.89
我们看到了什么? 平均每秒钟 11387.89 个请求, 就问你们怕不怕. 机器性能更好一下, 就是一波 DOS 攻击了.
实际代理性能测试
实测效果
https://taobao.com(测试淘宝)
测试代理: http://localhost:3289/get/20
测试网站: https://taobao.com/
测试次数: 1000
成功次数: 984
失败次数: 16
成功率: 0.984
https://baidu.com(测试百度)
测试代理: http://localhost:3289/get/20
测试网站: https://baidu.com
测试次数: 1000
成功次数: 975
失败次数: 25
成功率: 0.975
https://zhihu.com(测试知乎)
测试代理: http://localhost:3289/get/20
测试网站: https://zhihu.com
测试次数: 1000
成功次数: 1000
失败次数: 0
成功率: 1.0
可以看到其实性能是非常棒的, 成功率极高.
写在最后
对于做爬虫的人来说, 拥有一个免费的代理池是必须要. 如果没有的话就需要去付费购买, 有了这个项目源码之后, 就相当于每个月省了至少是一百多块钱. 同时 Python 的异步是未来的发展趋势, sanic 异步框架天生就是处理百万级高并发的, 如果你学会了这个项目出去找工作竞争是十分大的.
来源: http://www.jianshu.com/p/5e4ac13168e3