python 爬虫工具 butter_GitHub - TheButterflyOdor/proxy_pool: Python爬虫代理IP池(proxy pool)
爬蟲IP代理池
______ ______ _
| ___ \_ | ___ \ | |
| |_/ / \__ __ __ _ __ _ | |_/ /___ ___ | |
| __/| _// _ \ \ \/ /| | | || __// _ \ / _ \ | |
| | | | | (_) | > < \ |_| || | | (_) | (_) || |___
\_| |_| \___/ /_/\_\ \__ |\_| \___/ \___/ \_____\
__ / /
/___ /
下載安裝
下載源碼:
git clone git@github.com:jhao104/proxy_pool.git
或者直接到https://github.com/jhao104/proxy_pool 下載zip文件
安裝依賴:
pip install -r requirements.txt
配置Config.ini:
# Config.ini 為項目配置文件
# 配置DB
type = SSDB # 如果使用SSDB或redis數據庫,均配置為SSDB
host = localhost # db host
port = 8888 # db port
name = proxy # 默認配置
# 配置 ProxyGetter
freeProxyFirst = 1 # 這里是啟動的抓取函數,可在ProxyGetter/getFreeProxy.py 擴展
freeProxySecond = 1
....
# 配置 HOST (api服務)
ip = 127.0.0.1 # 監聽ip,0.0.0.0開啟外網訪問
port = 5010 # 監聽端口
# 上面配置啟動后,代理api地址為 http://127.0.0.1:5010
啟動:
# 如果你的依賴已經安全完成并且具備運行條件,可以直接在Run下運行main.py
# 到Run目錄下:
>>>python main.py
# 如果運行成功你應該看到有4個main.py進程
# 你也可以分別運行他們,
# 依次到Api下啟動ProxyApi.py,Schedule下啟動ProxyRefreshSchedule.py和ProxyValidSchedule.py即可.
使用
啟動過幾分鐘后就能看到抓取到的代理IP,你可以直接到數據庫中查看,推薦一個SSDB可視化工具。
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/").content
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()
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.ini文件中的[ProxyGetter]項:
在Config.ini的[ProxyGetter]下添加自定義的方法的名字:
[ProxyGetter]
;register the proxy getter function
freeProxyFirst = 0 # 如果要取消某個方法,將其刪除或賦為0即可
....
freeProxyCustom = 1 # 確保名字和你添加方法名字一致
ProxyRefreshSchedule會每隔一段時間抓取一次代理,下次抓取時會自動識別調用你定義的方法。
問題反饋
任何問題歡迎在Issues 中反饋,如果沒有賬號可以去 我的博客中留言。
你的反饋會讓此項目變得更加完美。
貢獻代碼
本項目僅作為基本的通用的代理池架構,不接收特有功能(當然,不限于特別好的idea)。
本項目依然不夠完善,如果發現bug或有新的功能添加,請在Issues中提交bug(或新功能)描述,在確認后提交你的代碼。
這里感謝以下contributor的無私奉獻:
總結
以上是生活随笔為你收集整理的python 爬虫工具 butter_GitHub - TheButterflyOdor/proxy_pool: Python爬虫代理IP池(proxy pool)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 柏厨定制家居怎样呀?全屋定制可以选他们不
- 下一篇: 华普小汽车故障有哪些原因呢?