下載安裝
- 下載源碼:
git clone git@github.com:jhao104/proxy_pool.git
或者直接到https://github.com/jhao104/proxy_pool/releases 下載zip文件
- 安裝依賴:
pip install -r requirements.txt
- 配置Config/setting.py:
# Config/setting.py 為項目配置文件 # 配置DB DATABASES = { "default": { "TYPE": "SSDB", # 目前支持SSDB或REDIS數據庫 "HOST": "127.0.0.1", # db host "PORT": 8888, # db port,例如SSDB通常使用8888,REDIS通常默認使用6379 "NAME": "proxy", # 默認配置 "PASSWORD": "" # db password } } # 配置 ProxyGetter PROXY_GETTER = [ "freeProxy01", # 這里是啟用的代理抓取函數名,可在ProxyGetter/getFreeProxy.py 擴展 "freeProxy02", .... ] # 配置 API服務 SERVER_API = { "HOST": "0.0.0.0", # 監聽ip, 0.0.0.0 監聽所有IP "PORT": 5010 # 監聽端口 } # 上面配置啟動后,代理池訪問地址為 http://127.0.0.1:5010
- 啟動:
# 如果你的依賴已經安裝完成並且具備運行條件,可以在cli目錄下通過ProxyPool.py啟。動 # 程序分為: schedule 調度程序 和 webserver Api服務 # 首先啟動調度程序 >>>python proxyPool.py schedule # 然后啟動webApi服務 >>>python proxyPool.py webserver
Docker
docker pull jhao104/proxy_pool
docker run --env db_type=REDIS --env db_host=127.0.0.1 --env db_port=6379 --env db_password=pwd_str -p 5010:5010 jhao104/proxy_pool
使用
啟動過幾分鍾后就能看到抓取到的代理IP,你可以直接到數據庫中查看,推薦一個SSDB可視化工具。
也可以通過api訪問http://127.0.0.1:5010 查看。
- Api
api | method | Description | arg |
---|---|---|---|
/ | GET | api介紹 | None |
/get | GET | 隨機獲取一個代理 | None |
/get_all | GET | 獲取所有代理 | None |
/get_status | GET | 查看代理數量 | None |
/delete | GET | 刪除代理 | proxy=host:ip |
- 爬蟲使用
如果要在爬蟲代碼中使用的話, 可以將此api封裝成函數直接使用,例如:
import requests
def get_proxy(): return requests.get("http://127.0.0.1:5010/get/").json() def delete_proxy(proxy): requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy)) # your spider code def getHtml(): # .... retry_count = 5 proxy = get_proxy().get("proxy") while retry_count > 0: try: html = requests.get('https://www.example.com', proxies={"http": "http://{}".format(proxy)}) # 使用代理訪問 return html except Exception: retry_count -= 1 # 出錯5次, 刪除代理池中代理 delete_proxy(proxy) return None
擴展代理
項目默認包含幾個免費的代理獲取方法,但是免費的畢竟質量不好,所以如果直接運行可能拿到的代理質量不理想。所以,提供了代理獲取的擴展方法。
添加一個新的代理獲取方法如下:
- 1、首先在GetFreeProxy類中添加你的獲取代理的靜態方法, 該方法需要以生成器(yield)形式返回
host:ip
格式的代理,例如:
class GetFreeProxy(object): # .... # 你自己的方法 @staticmethod def freeProxyCustom(): # 命名不和已有重復即可 # 通過某網站或者某接口或某數據庫獲取代理 任意你喜歡的姿勢都行 # 假設你拿到了一個代理列表 proxies = ["139.129.166.68:3128", "139.129.166.61:3128", ...] for proxy in proxies: yield proxy # 確保每個proxy都是 host:ip正確的格式就行
- 2、添加好方法后,修改Config/setting.py文件中的
PROXY_GETTER
項:
在PROXY_GETTER
下添加自定義的方法的名字:
PROXY_GETTER = [
"freeProxy01", "freeProxy02", .... "freeProxyCustom" # # 確保名字和你添加方法名字一致 ]
ProxySchedule
會每隔一段時間抓取一次代理,下次抓取時會自動識別調用你定義的方法。
代理采集
目前實現的采集免費代理網站有(排名不分先后, 下面僅是對其發布的免費代理情況, 付費代理測評可以參考這里):
廠商名稱 | 狀態 | 更新速度 | 可用率 | 是否被牆 | 地址 |
---|---|---|---|---|---|
無憂代理 | 可用 | 幾分鍾一次 | * | 否 | 地址 |
66代理 | 可用 | 更新很慢 | * | 否 | 地址 |
西刺代理 | 可用 | 幾分鍾一次 | * | 否 | 地址 |
全網代理 | 可用 | 幾分鍾一次 | * | 否 | 地址 |
訓代理 | 已關閉免費代理 | * | * | 否 | 地址 |
快代理 | 可用 | 幾分鍾一次 | * | 否 | 地址 |
雲代理 | 可用 | 幾分鍾一次 | * | 否 | 地址 |
IP海 | 可用 | 幾小時一次 | * | 否 | 地址 |
免費IP代理庫 | 可用 | 快 | * | 否 | 地址 |
中國IP地址 | 可用 | 幾分鍾一次 | * | 是 | 地址 |
Proxy List | 可用 | 幾分鍾一次 | * | 是 | 地址 |
ProxyList+ | 可用 | 幾分鍾一次 | * | 是 | 地址 |