python爬蟲由淺入深15---利用Redis+Flask來維護代理池和Cookie池
Redis主要用來維護池,提供池的佇列儲存
關於Redis的安裝與配置,可見點選開啟連結
Flask來實現池的介面,用它來從中拿出內容
代理池:
作用:用來偽裝IP,更好地利用代理資源來應對站點的反爬蟲策略
要求:多站抓取,非同步檢測
定時篩選,持續更新
提供介面,易於提取(利用Python的Flask包來提供web介面)
代理池的架構:
代理池的實現:此處貼上Github上大佬的開源專案
將其程式碼down下來,發現其結構如下:
配置代理池
cd proxypool
進入proxypool目錄,修改settings.py檔案
PASSWORD為Redis密碼,如果為空,則設定為None
安裝依賴
pip3 install -r requirements.txt
開啟代理池和API
python3 run.py
獲取代理
利用requests獲取方法如下
import requests PROXY_POOL_URL = 'http://localhost:5000/get' def get_proxy(): try: response = requests.get(PROXY_POOL_URL) if response.status_code == 200: return response.text except ConnectionError: return None
各模組功能
-
getter.py
爬蟲模組
-
class proxypool.getter.FreeProxyGetter
爬蟲類,用於抓取代理源網站的代理,使用者可複寫和補充抓取規則。
-
-
schedule.py
排程器模組
-
class proxypool.schedule.ValidityTester
非同步檢測類,可以對給定的代理的可用性進行非同步檢測。
-
class proxypool.schedule.PoolAdder
代理新增器,用來觸發爬蟲模組,對代理池內的代理進行補充,代理池代理數達到閾值時停止工作。
-
class proxypool.schedule.Schedule
代理池啟動類,執行RUN函式時,會建立兩個程序,負責對代理池內容的增加和更新。
-
-
db.py
Redis資料庫連線模組
-
class proxypool.db.RedisClient
資料庫操作類,維持與Redis的連線和對資料庫的增刪查該,
-
-
error.py
異常模組
-
class proxypool.error.ResourceDepletionError
資源枯竭異常,如果從所有抓取網站都抓不到可用的代理資源,
則丟擲此異常。
-
class proxypool.error.PoolEmptyError
代理池空異常,如果代理池長時間為空,則丟擲此異常。
-
-
api.py
API模組,啟動一個Web伺服器,使用Flask實現,對外提供代理的獲取功能。
-
utils.py
工具箱
-
setting.py
設定
Cookie池:
為什麼要維護cookie池??
1.有的網站需要登入後才能爬取,如新浪微博
2.爬取過程中如果頻率過高會導致封號,那麼如果想要獲得非常多的資料,則需要非常多的賬號
cookie池的要求:
1.自動登入更新
2.定時驗證篩選
3.提供外部介面(可將池架在遠端的伺服器上,實現遠端部署)
cookie池的架構
cookie池的實現:需要先將一定量的賬號密碼之類的cookie存進Redis資料庫,然後利用python呼叫並維護
關於cookies池的維護,有以下開源專案案例可供參考: