GitHub: ProxyPool 爬蟲代理IP池

GitHub: ProxyPool 爬蟲代理IP池

hello,小夥伴們,你們好,今天給你們分享的開源項目是:proxy_pool,這個開源項目是抓取個大免費代理IP網站,感興趣的爬蟲能夠嘗試把代碼clone下載而後嘗試應用一下,加油!!!html

______                        ______             _
| ___ \_                      | ___ \           | |
| |_/ / \__ __   __  _ __   _ | |_/ /___   ___  | |
|  __/|  _// _ \ \ \/ /| | | ||  __// _ \ / _ \ | |
| |   | | | (_) | >  < \ |_| || |  | (_) | (_) || |___
\_|   |_|  \___/ /_/\_\ \__  |\_|   \___/ \___/ \_____\
                       __ / /
                      /___ /

免費代理源


目前實現的採集免費代理網站有(排名不分前後, 下面僅是對其發佈的免費代理狀況, 付費代理測評能夠參考這裏):python

若是還有其餘好的免費代理網站, 能夠在提交在issues, 下次更新時會考慮在項目中支持。git

運行項目


下載代碼:

git clone git@github.com:jhao104/proxy_pool.git

orgithub

https://github.com/jhao104/proxy_pool/releases 下載對應zip文件

安裝依賴:

pip install -r requirements.txt

更新配置:

# setting.py 爲項目配置文件

# 配置API服務

HOST = "0.0.0.0"               # IP
PORT = 5000                    # 監聽端口


# 配置數據庫

DB_CONN = 'redis://@127.0.0.1:8888'


# 配置 ProxyFetcher

PROXY_FETCHER = [
    "freeProxy01",      # 這裏是啓用的代理抓取方法名,全部fetch方法位於fetcher/proxyFetcher.py
    "freeProxy02",
    # ....
]

啓動項目:

# 若是已經具有運行條件, 可用經過proxyPool.py啓動。
# 程序分爲: schedule 調度程序 和 server Api服務

# 啓動調度程序
python proxyPool.py schedule

# 啓動webApi服務
python proxyPool.py server

Docker運行

docker pull jhao104/proxy_pool

docker run --env DB_CONN=redis://:password@ip:port/db -p 5010:5010 jhao104/proxy_pool:2.1.0

使用


若是要在爬蟲代碼中使用的話, 能夠將此api封裝成函數直接使用,例如:web

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

擴展代理


項目默認包含幾個免費的代理獲取源,可是免費的畢竟質量有限,因此若是直接運行可能拿到的代理質量不理想。因此,提供了代理獲取的擴展方法。redis

添加一個新的代理源方法以下: 一、首先在ProxyFetcher類中添加自定義的獲取代理的靜態方法, 該方法須要以生成器(yield)形式返回host:ip格式的代理,例如:docker

class ProxyFetcher(object):
    # ....

    # 自定義代理源獲取方法
    @staticmethod
    def freeProxyCustom1():  # 命名不和已有重複便可

        # 經過某網站或者某接口或某數據庫獲取代理
        # 假設你已經拿到了一個代理列表
        proxies = ["x.x.x.x:3128", "x.x.x.x:80"]
        for proxy in proxies:
            yield proxy
        # 確保每一個proxy都是 host:ip正確的格式返回

二、添加好方法後,修改setting.py文件中的PROXY_FETCHER項:  在PROXY_FETCHER下添加自定義方法的名字:數據庫

PROXY_FETCHER = [
    "freeProxy01",    
    "freeProxy02",
    # ....
    "freeProxyCustom1"  #  # 確保名字和你添加方法名字一致
]

schedule 進程會每隔一段時間抓取一次代理,下次抓取時會自動識別調用你定義的方法。json

以上就是這個開源項目的詳細介紹了,感興趣的小夥伴能夠嘗試應用一下。api

開源地址:https://github.com/jhao104/proxy_pool

今天的推薦不知道你們喜歡嗎?若是大家喜歡話,請在文章底部留言或點贊,以表示對個人支持,大家的留言,點贊,轉發關注是我持續更新的動力哦!

關注公衆號回覆:"1024",免費領取一大波學習資源,先到先得哦!

相關文章
相關標籤/搜索