12.21 Python最強的代理池,突破IP的封鎖爬取海量數據(送項目源碼)


Python最強的代理池,突破IP的封鎖爬取海量數據(送項目源碼)


一個強大到超乎你的想象的異步IP池項目

async-proxy-pool

隨著大型網站反扒機制的增強,更改IP登陸已經成為一種最高效的方式,為此打造一款超強IP池項目,採用最新最快的Python技術——異步(Async )。編寫了一個免費的異步爬蟲代理池,以 Python asyncio 為基礎,充分利用 Python 的異步性能,異步處理比同步處理能提升成百上千倍的效率,速度堪比GO語言。

入門Python其實很容易,但是我們要去堅持學習,每一天堅持很困難,我相信很多人學了一個星期就放棄了,為什麼呢?其實沒有好的學習資料給你去學習,你們是很難堅持的,這是小編收集的Python入門學習資料關注,轉發,私信小編“01”,即可免費領取!希望對你們有幫助

Python最強的代理池,突破IP的封鎖爬取海量數據(送項目源碼)


•項目介紹•

本項目通過爬蟲抓取互聯網上免費代理網站的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',證明成功啟動。

Python最強的代理池,突破IP的封鎖爬取海量數據(送項目源碼)

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

Python最強的代理池,突破IP的封鎖爬取海量數據(送項目源碼)

也可以在程序代碼中用相應的語言獲取,例如:

<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異步框架天生就是處理百萬級高併發的,如果你學會了這個項目出去找工作競爭是十分大的。


分享到:


相關文章: