python最強的代理池,突破IP的封鎖爬取海量資料(送專案原始碼)
一個強大到超乎你的想象的非同步IP池專案——async-proxy-pool
隨著大型網站反扒機制的增強,更改IP登陸已經成為一種最高效的方式,為此打造一款超強IP池專案,採用最新最快的Python技術——非同步(Async )。編寫了一個免費的非同步爬蟲代理池,以 Python asyncio 為基礎,充分利用 Python 的非同步效能,非同步處理比同步處理能提升成百上千倍的效率,速度堪比GO語言。
學習Python中有不明白推薦加入交流群
號:864573496 群裡有志同道合的小夥伴,互幫互助, 群裡有不錯的視訊學習教程和PDF!

image
專案介紹
本專案通過爬蟲抓取網際網路上免費代理網站的IP,並且進行非同步檢測是否可用,如果可用就放入資料庫。定時對資料庫中的代理進行維護,然後通過web api的形式供外部使用。
專案執行環境
專案使用了 sanic,一個非同步網路框架。所以建議執行 Python 環境為 Python3.5+,並且 sanic 不支援 Windows 系統,Windows 使用者可以考慮使用 Ubuntu on Windows。
總體架構

image
專案主要幾大模組分別是爬取模組,儲存模組,校驗模組,排程模組,介面模組。
- 爬取模組crawler.py
負責爬取代理網站,並將所得到的代理存入到資料庫,每個代理的初始化權值為 INIT_SCORE。
- 儲存模組database.py
封裝了 Redis 操作的一些介面,提供 Redis 連線池。
- 校驗模組validator.py
驗證代理 IP 是否可用,如果代理可用則權值 +1,最大值為 MAX_SCORE。不可用則權值 -1,直至權值為 0 時將代理從資料庫中刪除。
- 排程模組scheduler.py
負責排程爬取器和校驗器的執行。
- 介面模組webapi.py
使用 sanic 提供 WEB API (伺服器提供介面)。
如何使用

image
安裝 Redis
專案資料庫使用了 Redis,Redis 是一個開源(BSD 許可)的,記憶體中的資料結構儲存系統,它可以用作資料庫、快取和訊息中介軟體。所以請確保執行環境已經正確安裝了 Redis。安裝方法請參照官網指南。
專案原始碼
點選關注、轉發、私信小編"史上最強代理池",就能免費獲取強大的非同步爬蟲代理池專案原始碼。
安裝依賴
$ pip install -r requirements.txt
使用API獲取代理
執行程式碼後,訪問http://127.0.0.1:5000/進入主頁,如果顯示'Welcome',證明成功啟動。

image
訪問 http://127.0.0.1:5000/get 可以獲取一個可用代理。

image
也可以在程式程式碼中用相應的語言獲取,例如:
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 效能測試

image
使用 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
:star:️ 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
</pre>
https://zhihu.com (測試知乎)
測試代理: http://localhost:3289/get/20
測試網站: https://zhihu.com
測試次數: 1000
成功次數: 1000
失敗次數: 0
成功率: 1.0
</pre>
可以看到其實效能是非常棒的,成功率極高。
寫在最後
對於做爬蟲的人來說,擁有一個免費的代理池是必須要。如果沒有的話就需要去付費購買,有了這個專案原始碼之後,就相當於每個月省了至少是一百多塊錢。同時Python的非同步是未來的發展趨勢,sanic非同步框架天生就是處理百萬級高併發的,如果你學會了這個專案出去找工作競爭是十分大的。
python最強的代理池,突破IP的封鎖爬取海量資料(送專案原始碼)