1. 程式人生 > >python爬蟲由淺入深15---利用Redis+Flask來維護代理池和Cookie池

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池的維護,有以下開源專案案例可供參考: