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
",免費領取一大波學習資源,先到先得哦!