一個(gè)強(qiáng)大到超乎你的想象的異步IP池項(xiàng)目——async-proxy-pool
隨著大型網(wǎng)站反扒機(jī)制的增強(qiáng)河哑,更改IP登陸已經(jīng)成為一種最高效的方式,為此打造一款超強(qiáng)IP池項(xiàng)目,采用最新最快的Python技術(shù)——異步(Async )河爹。編寫了一個(gè)免費(fèi)的異步爬蟲代理池匠璧,以 Python asyncio 為基礎(chǔ),充分利用 Python 的異步性能咸这,異步處理比同步處理能提升成百上千倍的效率夷恍,速度堪比GO語言。
項(xiàng)目介紹
本項(xiàng)目通過爬蟲抓取互聯(lián)網(wǎng)上免費(fèi)代理網(wǎng)站的IP媳维,并且進(jìn)行異步檢測(cè)是否可用酿雪,如果可用就放入數(shù)據(jù)庫。定時(shí)對(duì)數(shù)據(jù)庫中的代理進(jìn)行維護(hù)侄刽,然后通過web api的形式供外部使用指黎。
項(xiàng)目運(yùn)行環(huán)境
項(xiàng)目使用了 sanic,一個(gè)異步網(wǎng)絡(luò)框架州丹。所以建議運(yùn)行 Python 環(huán)境為 Python3.5+醋安,并且 sanic 不支持 Windows 系統(tǒng),Windows 用戶可以考慮使用 Ubuntu on Windows墓毒。
總體架構(gòu)
項(xiàng)目主要幾大模塊分別是爬取模塊茬故,存儲(chǔ)模塊,校驗(yàn)?zāi)K蚁鳖,調(diào)度模塊,接口模塊赁炎。
爬取模塊crawler.py
負(fù)責(zé)爬取代理網(wǎng)站醉箕,并將所得到的代理存入到數(shù)據(jù)庫,每個(gè)代理的初始化權(quán)值為 INIT_SCORE徙垫。
存儲(chǔ)模塊database.py
封裝了 Redis 操作的一些接口讥裤,提供 Redis 連接池。
校驗(yàn)?zāi)Kvalidator.py
驗(yàn)證代理 IP 是否可用姻报,如果代理可用則權(quán)值 +1己英,最大值為 MAX_SCORE。不可用則權(quán)值 -1吴旋,直至權(quán)值為 0 時(shí)將代理從數(shù)據(jù)庫中刪除损肛。
調(diào)度模塊scheduler.py
負(fù)責(zé)調(diào)度爬取器和校驗(yàn)器的運(yùn)行。
接口模塊webapi.py
使用 sanic 提供 WEB API (服務(wù)器提供接口)荣瑟。
如何使用
安裝 Redis
項(xiàng)目數(shù)據(jù)庫使用了 Redis治拿,Redis 是一個(gè)開源(BSD 許可)的,內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng)笆焰,它可以用作數(shù)據(jù)庫劫谅、緩存和消息中間件。所以請(qǐng)確保運(yùn)行環(huán)境已經(jīng)正確安裝了 Redis。安裝方法請(qǐng)參照官網(wǎng)指南捏检。
項(xiàng)目源碼
點(diǎn)擊關(guān)注荞驴、轉(zhuǎn)發(fā)、私信小編"史上最強(qiáng)代理池"贯城,就能免費(fèi)獲取強(qiáng)大的異步爬蟲代理池項(xiàng)目源碼熊楼。
安裝依賴
$ pip install -r requirements.txt
使用API獲取代理
運(yùn)行代碼后,訪問http://127.0.0.1:5000/進(jìn)入主頁冤狡,如果顯示'Welcome'孙蒙,證明成功啟動(dòng)。
訪問http://127.0.0.1:5000/get可以獲取一個(gè)可用代理悲雳。
也可以在程序代碼中用相應(yīng)的語言獲取挎峦,例如:
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 性能測(cè)試
使用 wrk 進(jìn)行服務(wù)器壓力測(cè)試『掀埃基準(zhǔn)測(cè)試 30 秒, 使用 12 個(gè)線程, 并發(fā) 400 個(gè) http 連接坦胶。測(cè)試 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個(gè)請(qǐng)求晴楔,就問你們怕不怕顿苇。機(jī)器性能更好一下,就是一波DOS攻擊了税弃。
實(shí)際代理性能測(cè)試
實(shí)測(cè)效果
https://taobao.com(測(cè)試淘寶)
測(cè)試代理: http://localhost:3289/get/20
測(cè)試網(wǎng)站: https://taobao.com/
測(cè)試次數(shù): 1000
成功次數(shù): 984
失敗次數(shù): 16
成功率: 0.984
https://baidu.com(測(cè)試百度)
測(cè)試代理: http://localhost:3289/get/20
測(cè)試網(wǎng)站: https://baidu.com
測(cè)試次數(shù): 1000
成功次數(shù): 975
失敗次數(shù): 25
成功率: 0.975
</pre>
https://zhihu.com(測(cè)試知乎)
測(cè)試代理: http://localhost:3289/get/20
測(cè)試網(wǎng)站: https://zhihu.com
測(cè)試次數(shù): 1000
成功次數(shù): 1000
失敗次數(shù): 0
成功率: 1.0
</pre>
可以看到其實(shí)性能是非常棒的纪岁,成功率極高。
最后则果,想學(xué)習(xí)Python的小伙伴們幔翰!
從0到1完整學(xué)習(xí)資料 視頻 源碼 精品書籍 一個(gè)月經(jīng)典筆記和99道練習(xí)題及答案免費(fèi)獲取
進(jìn)群:984632579?