歡迎光臨
每天分享高質量文章

Python最強的代理池,突破IP的封鎖爬取海量資料(送專案原始碼)

•一個強大到超乎你的想象的非同步IP池專案•

async-proxy-pool

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

•專案介紹•

本專案透過爬蟲抓取網際網路上免費代理網站的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.96137.29 2.2173.29%
 342764 requests in 30.10s, 49.69MB read
Requests/sec: 11387.89
Transfer/sec: 1.65MB

我們看到了什麼?平均每秒鐘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非同步框架天生就是處理百萬級高併發的,如果你學會了這個專案出去找工作競爭是十分大的。

 

公眾號推薦

Python學習交流樂園:

內含Python免費學習資料,自行領取各階段資料,Python知識和技術查漏補缺,空餘時間學習碎片化知識,分享開發、爬蟲、資料分析、機器學習等綜合性知識,助力職場最後一公里與職業進階,每天看寶典,就選它。

一掃

關註

關註

點選閱讀原文,獲得更多精彩

    閱讀原文

    贊(0)

    分享創造快樂