用Python實現代理池(Proxy Pool)系統
注意:請執行程式前先更新一下抓取代理的函式。
執行環境
Python 3.5
(請務必保證Python的版本在3.5以上,否則非同步檢驗無法使用。)
Redis
Redis官網並沒有提供Windows的安裝版,Windows使用者可以點選此處下載一個我自己編譯的二進位制版本(3.2版本2.7MB,VS 2015編譯)。
安裝
① 直接使用
安裝依賴
$ pip install -r requirements.txt
Windows使用者如果無法安裝lxml庫請點選這裡。
開啟代理池和API
$ cd proxypool
$ python3 run.py
② 安裝使用
安裝
$ cd proxypool
$ python setup.py install
開啟代理池和API
$ proxypool_run
③ 使用二進位制包
Windows 使用者可以點選此處獲取此程式的二進位制包,直接執行。
使用API獲取代理
訪問http://127.0.0.1:5000/
進入主頁,如果顯示’Welcome’,證明成功啟動。
訪問http://127.0.0.1:5000/get
可以獲取一個可用代理。
訪問http://127.0.0.1:5000/count
可以獲取代理池中可用代理的數量。
也可以在程式程式碼中用相應的語言獲取,例如:
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
各模組功能
proxyGetter.py
爬蟲模組
- class proxypool.proxyGetter.FreeProxyGetter
爬蟲類,用於抓取代理源網站的代理,使用者可複寫和補充抓取規則。
schdule.py
排程器模組
- class proxypool.schdule.VaildityTester
非同步檢測類,可以對給定的代理的可用性進行非同步檢測。
- class proxypool.schdule.PoolAdder
代理新增器,用來觸發爬蟲模組,對代理池內的代理進行補充,代理池代理數達到閾值時停止工作。
- class proxypool.schdule.Schedule
代理池啟動類,執行RUN函式時,會建立兩個程序,負責對代理池內容的增加和更新。
db.py
Redis資料庫連線模組
- class proxypool.db.RedisClient
資料庫操作類,維持與Redis的連線和對資料庫的增刪查該,
error.py
異常模組
- class proxypool.error.ResourceDepletionError
資源枯竭異常,如果從所有抓取網站都抓不到可用的代理資源,
則丟擲此異常。
- class proxypool.error.PoolEmptyError
代理池空異常,如果代理池長時間為空,則丟擲此異常。
api.py
API模組,啟動一個Web伺服器,對外提供代理的獲取功能。
utils.py
工具箱
setting.py
設定