爬蟲福音:Github星標14K++,一個開源的IP代理池
大家好,我是丁小杰!
時間過得真快,一眨眼就到了元宵節,大家記得吃元宵哦~
不知道大家在寫爬蟲時是否遇到過這樣的情況,測試時爬蟲可以正常工作,但運行一段時間,就會發現報錯或是沒有數據返回,網頁可能會提示“IP訪問頻繁”。這就說明網站對IP方面是有反爬措施的(IP一定時間內的請求次數及速度)。如果超過了某個閾值,就會直接拒絕服務,也就是經常說的“封IP”。
這種情況下,就到了代理IP出場了。代理實際就是代理服務器,它的工作原理其實很簡單,在我們正常請求一個網站時,是直接發送請求給Web服務器,Web服務器把響應數據傳給我們。而用了代理IP,就像是在本機和Web服務器之間搭建了一個“橋”,此時本機會先向代理服務器發出請求,再由代理服務器發送給Web服務器。響應數據的返回也是同樣的道理,都需要代理服務器來中轉。這樣Web服務器就不容易識別出本機IP了。
但代理IP也有優劣之分,以隱匿性來分有3種:高匿代理,普匿代理,透明代理。
接下來就看看 Github 熱門的開源項目 ProxyPool ,如何使用吧!
一個爬蟲代理IP池,定時采集網上發布的免費代理并驗證入庫,定時檢測代理的可用性,提供 API 和 CLI 兩種使用方式。同時你也可以擴展代理源以增加代理池IP的質量和數量。
通過 git clone 下載代碼
git clone git@github.com:jhao104/proxy_pool.git
下載對應zip文件
pip install -r requirements.txt
打開代碼文件中的 setting.py ,根據自己的需求修改項目配置。
# 配置API服務 HOST = "0.0.0.0" # IP PORT = 5000 # 監聽端口 # 配置數據庫 DB_CONN = 'redis://:pwd@127.0.0.1:8888/0' # 無密碼 DB_CONN = 'redis://:@127.0.0.1:8888/0' # proxy table name 表名(自己建的) TABLE_NAME = 'use_proxy' # 配置 ProxyFetcher PROXY_FETCHER = [ "freeProxy01", # 這里是啟用的代理抓取方法名,所有fetch方法位于fetcher/proxyFetcher.py "freeProxy02", # .... ]
啟動 redis 服務:redis-server.exe(可執行文件在 redis 安裝路徑下)。
1.啟動調度程序
啟動調度程序,在 Proxy_pool 項目路徑下打開 cmd 輸入:
python proxyPool.py schedule
讀取數據庫中的代理。
import redis r = redis.StrictRedis(host="127.0.0.1", port=6379, db=0) result = r.hgetall('use_proxy') result.keys()
2.啟動webApi服務
python proxyPool.py server
啟動web服務后, 默認配置下會開啟 http://127.0.0.1:5010 的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
代理池中的代理畢竟是爬取的免費代理,IP質量那真是一言難盡,但也足夠日常開發使用。
對于使用還有不懂的話,可以看一下完整文檔。
項目地址:
Git GitHub
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。