免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
爬蟲福音:GitHub 超火爆開源 IP 代理池

作者:閑歡

來源:Python 技術(shù)

經(jīng)常有粉絲在后臺留言,問:大佬,運行你的爬蟲程序怎么報錯了?

我讓他把報錯信息發(fā)過來,看過之后一聲嘆息。

大多數(shù)粉絲是直接拿著代碼就開始運行,然后就是等待結(jié)果,完全不去仔細(xì)閱讀和理解源碼,遇到報錯就直接過來詢問。

多數(shù)爬蟲源碼運行的報錯都是由于訪問目標(biāo)網(wǎng)站過于頻繁,從而導(dǎo)致目標(biāo)網(wǎng)站返回錯誤或者沒有數(shù)據(jù)返回。

目前大多數(shù)網(wǎng)站都是有反爬措施的,如果 IP 在一定時間內(nèi) 請求次數(shù)超過了一定的閾值就會觸發(fā)反爬措施,拒絕訪問,也就是我們經(jīng)常聽到的“封IP”。

那么怎么解決這個問題呢?

一種解決辦法就是降低訪問頻率,訪問一次就等待一定時長,然后再次訪問。這種方法對于反爬措施不嚴(yán)格的網(wǎng)站是有效的。

如果遇到反爬措施嚴(yán)格的網(wǎng)站,訪問次數(shù)多了還是會被封殺。而且有時候你需要爬取數(shù)據(jù),這種解決辦法會使獲取數(shù)據(jù)的周期特別長。

第二種解決辦法就是使用代理 IP。我不斷地切換 IP 訪問,讓目標(biāo)網(wǎng)站認(rèn)為是不同的用戶在訪問,從而繞過反爬措施。這也是最常見的方式。

接著,我們又面臨一個問題:哪來這么多獨立 IP 地址呢?

最省事的方式當(dāng)然是花錢買服務(wù),這種花錢買到的 IP 一般都是比較穩(wěn)定可靠的。

今天我們來聊一下不花錢免費獲取代理 IP 的方式。

ProxyPool 簡介

ProxyPool 是一個爬蟲的代理 IP 池,主要功能為定時采集網(wǎng)上發(fā)布的免費代理驗證入庫,定時驗證入庫的代理保證代理的可用性,提供API和CLI兩種使用方式。

同時你也可以擴(kuò)展代理源以增加代理池IP的質(zhì)量和數(shù)量。

獲取項目

我們可以通過兩種方式獲取 ProxyPool 項目。

第一種是通過命令行下載:

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

第二種是下載對應(yīng)的 zip 壓縮包:

安裝依賴

我們獲取到項目之后,進(jìn)入到項目的根目錄,運行下面的代碼來安裝項目所需的依賴包:

pip install -r requirements.txt

修改配置文件

要在本地運行項目,我們需要針對本地環(huán)境修改一些配置。打開項目中的 setting.py 這個文件,根據(jù)自己本地的環(huán)境和要求修改配置。

# setting.py 為項目配置文件# 配置API服務(wù)HOST = '0.0.0.0' # IPPORT = 5000 # 監(jiān)聽端口# 配置數(shù)據(jù)庫DB_CONN = 'redis://:pwd@127.0.0.1:8888/0'# 配置 ProxyFetcherPROXY_FETCHER = [ 'freeProxy01', # 這里是啟用的代理抓取方法名,所有fetch方法位于fetcher/proxyFetcher.py 'freeProxy02', # ....]

主要修改的幾項配置是監(jiān)聽端口(PORT)、 Redis 數(shù)據(jù)庫的配置(DB_CONN)和啟用的代理方法名(PROXY_FETCHER)。

啟動項目

修改完配置之后,我們就可以愉快地使用了。

這個項目總體分為兩個部分:爬取代理 IP 和 取用代理 IP。

如果你要啟用爬取代理 IP 的服務(wù),直接運行下面命令:

python proxyPool.py schedule

啟動之后,你就可以看到如下的控制臺信息了:

程序每隔一段時間就會定時爬取一下,直到我們的 IP 池里面有一定數(shù)量的可用 IP 。

其實,作者在這個項目中運用的原來就是到一些免費的代理網(wǎng)站采集 IP,然后測試 IP 的可用性,可用的就存入 Redis 中,不可用就丟棄。

所以你完全可以自己寫一套程序?qū)崿F(xiàn)這個邏輯。

使用代理 IP

要使用代理 IP,你需要啟動 webApi 服務(wù):

python proxyPool.py server

啟動web服務(wù)后, 默認(rèn)配置下會開啟 http://127.0.0.1:5010 的api接口服務(wù):

如果要在爬蟲代碼中使用的話, 可以將此api封裝成函數(shù)直接使用,例如:

import requestsdef 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 codedef 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

總結(jié)

作為學(xué)習(xí)使用的 IP 代理池,這項目獲取的足夠使用了,但是對于一些復(fù)雜的爬蟲項目或者商業(yè)項目的話,可能比較夠嗆,畢竟這種爬取的免費代理質(zhì)量肯定沒有那么好,不穩(wěn)定是正常的。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
開源又可拓展的爬蟲工具,目測要火!
Python爬蟲代理池分享——再也不怕反爬蟲
Python 爬蟲代理池
python爬蟲18 | 就算你被封了也能繼續(xù)爬,使用IP代理池偽裝你的IP地址,讓IP飄一會
防封ip解決方案之ip代理池
教你自己搭建一個ip池(絕對超好用!?。?!)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服