爬蟲IP代理池


下載安裝

  • 下載源碼:
    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+ 可用 幾分鍾一次 * 地址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM