docker快速啟動proxy_pool專案

2023-05-24 21:01:28

docker快速啟動proxy_pool專案

專案地址:https://github.com/jhao104/proxy_pool

0x01 搭建redis

該專案是基於redis的,所以我們首先需要一個redis,這裡我還是選擇用docker快速啟動一個

  • 埠對映出來,可用於公網
docker run -d --name redis -p 6380:6379 redis --requirepass yourpassword
  • 不埠對映,直接在vps上內部連線
docker run -d --name redis  redis --requirepass yourpassword

0x02 檢視容器內ip

如果你第一步中選擇了對映,呢麼就可以直接跳到0x03 啟動專案 中直接執行了,如果不是,那麼你就需要知道啟動的範例的內網ip,但是當我們docker exec 進去的時候會發現並沒有相關的ip addr的環境,懶得安裝了,直接在本機用如下命令

docker inspect redis

這裡的redis是容器的name,在結果中找到如下所示即為容器內網ip(可與本機通訊)

本機可以ping通

0x03 啟動專案

直接替換密碼,ip以及響應的埠即可,選擇對映出來的話再開放防火牆策略就可以通過公網ip存取了

docker run -d --env DB_CONN=redis://:[email protected]:6379/0 -p 5010:5010 jhao104/proxy_pool:latest

0x04 簡單使用

  • Api

啟動web服務後, 預設設定下會開啟 http://127.0.0.1:5010 的api介面服務:

api method Description params
/ GET api介紹 None
/get GET 隨機獲取一個代理 可選引數: ?type=https 過濾支援https的代理
/pop GET 獲取並刪除一個代理 可選引數: ?type=https 過濾支援https的代理
/all GET 獲取所有代理 可選引數: ?type=https 過濾支援https的代理
/count 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('http://www.example.com', proxies={"http": "http://{}".format(proxy)})
            # 使用代理存取
            return html
        except Exception:
            retry_count -= 1
    # 刪除代理池中代理
    delete_proxy(proxy)
    return None

剩下具體的可以去github看檔案

0x05 後續

後續的話可以使用docker-compose,然後編寫yml檔案等等操作來實現更「自動化」