1. 程式人生 > >用Python實現代理池(Proxy Pool)系統

用Python實現代理池(Proxy Pool)系統

Build Status
跨語言高效能IP代理池,Python實現。

注意:請執行程式前先更新一下抓取代理的函式。

執行環境

  • 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’,證明成功啟動。

pic

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

pic

訪問http://127.0.0.1:5000/count可以獲取代理池中可用代理的數量。

pic

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

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

    設定

picture