一個強大到超乎你的想象的異步IP池項目
async-proxy-pool
隨著大型網站反扒機制的增強,更改IP登陸已經成為一種最高效的方式,為此打造一款超強IP池項目,採用最新最快的Python技術——異步(Async )。編寫了一個免費的異步爬蟲代理池,以 Python asyncio 為基礎,充分利用 Python 的異步性能,異步處理比同步處理能提升成百上千倍的效率,速度堪比GO語言。
入門Python其實很容易,但是我們要去堅持學習,每一天堅持很困難,我相信很多人學了一個星期就放棄了,為什麼呢?其實沒有好的學習資料給你去學習,你們是很難堅持的,這是小編收集的Python入門學習資料關注,轉發,私信小編“01”,即可免費領取!希望對你們有幫助
•項目介紹•
本項目通過爬蟲抓取互聯網上免費代理網站的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。安裝方法請參照官網指南。
- 項目源碼
- 安裝依賴
<code>$pipinstall-rrequirements.txt
/<code>
•使用API獲取代理•
運行代碼後,訪問http://127.0.0.1:5000/進入主頁,如果顯示'Welcome',證明成功啟動。
訪問http://127.0.0.1:5000/get可以獲取一個可用代理。
也可以在程序代碼中用相應的語言獲取,例如:
<code>importrequests
frombs4importBeautifulSoup
importlxml
defget_proxy():
r=requests.get('http://127.0.0.1:5000/get')
proxy=BeautifulSoup(r.text,"lxml").get_text()
returnproxy
/<code>
•Sanic 性能測試•
使用 wrk 進行服務器壓力測試。基準測試 30 秒, 使用 12 個線程, 併發 400 個 http 連接。測試 http://127.0.0.1:3289/
<code>$wrk-t12-c400-d30shttp://127.0.0.1:3289/
Running30stest@http://127.0.0.1:3289/
12threadsand400connections
ThreadStatsAvgStdevMax+/-Stdev
Latency34.63ms12.66ms96.28ms58.07%
Req/Sec0.96k137.292.21k73.29%
342764requestsin30.10s,49.69MBread
Requests/sec:11387.89
Transfer/sec:1.65MB
/<code>
我們看到了什麼?平均每秒鐘11387.89個請求,就問你們怕不怕。機器性能更好一下,就是一波DOS攻擊了。
•實際代理性能測試•
- 實測效果
https://taobao.com(測試淘寶)
<code>測試代理:http://localhost:3289/get/20
測試網站:https://taobao.com/
測試次數:1000
成功次數:984
失敗次數:16
成功率:0.984
/<code>
https://baidu.com(測試百度)
<code>測試代理:http://localhost:3289/get/20
測試網站:https://baidu.com
測試次數:1000
成功次數:975
失敗次數:25
成功率:0.975
/<code>
https://zhihu.com(測試知乎)
<code>測試代理:http://localhost:3289/get/20
測試網站:https://zhihu.com
測試次數:1000
成功次數:1000
失敗次數:0
成功率:1.0
/<code>
可以看到其實性能是非常棒的,成功率極高。
• 總結 •
對於做爬蟲的人來說,擁有一個免費的代理池是必須要。如果沒有的話就需要去付費購買,有了這個項目源碼之後,就相當於每個月省了至少是一百多塊錢。同時Python的異步是未來的發展趨勢,sanic異步框架天生就是處理百萬級高併發的,如果你學會了這個項目出去找工作競爭是十分大的。
閱讀更多 程序員編程分享 的文章