<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 3145字,需瀏覽 7分鐘

           ·

          2022-04-20 19:41


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

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

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

          多數(shù)爬蟲源碼運(yùn)行的報(bào)錯都是由于訪問目標(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)為是不同的用戶在訪問,從而繞過反爬措施。這也是最常見的方式。

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

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

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

          ProxyPool 簡介

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

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

          獲取項(xiàng)目

          我們可以通過兩種方式獲取 ProxyPool 項(xiàng)目。

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

          git clone [email protected]:jhao104/proxy_pool.git

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

          安裝依賴

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

          pip install -r requirements.txt

          修改配置文件

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


          #?setting.py?為項(xiàng)目配置文件

          #?配置API服務(wù)

          HOST?=?"0.0.0.0"???????????????#?IP
          PORT?=?5000????????????????????#?監(jiān)聽端口


          #?配置數(shù)據(jù)庫

          DB_CONN?=?'redis://:[email protected]:8888/0'

          #?配置?ProxyFetcher

          PROXY_FETCHER?=?[
          ????"freeProxy01",??????#?這里是啟用的代理抓取方法名,所有fetch方法位于fetcher/proxyFetcher.py
          ????"freeProxy02",
          ????#?....
          ]

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

          啟動項(xiàng)目

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

          這個項(xiàng)目總體分為兩個部分:爬取代理 IP 和 取用代理 IP。

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

          python proxyPool.py schedule

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

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

          其實(shí),作者在這個項(xiàng)目中運(yùn)用的原來就是到一些免費(fèi)的代理網(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?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

          總結(jié)

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


          這是我開發(fā)的機(jī)器人公眾號小號,目前增加了天氣查詢,955公司名單,關(guān)注時間查詢;后面還會增加圖片功能和每日送書抽獎送書活動,以及調(diào)戲功能,歡迎來體驗(yàn),捧場。


          一個機(jī)器人公眾號已經(jīng)上線,歡迎調(diào)戲




          推薦閱讀:

          入門:?最全的零基礎(chǔ)學(xué)Python的問題? |?零基礎(chǔ)學(xué)了8個月的Python??|?實(shí)戰(zhàn)項(xiàng)目?|學(xué)Python就是這條捷徑


          干貨:爬取豆瓣短評,電影《后來的我們》?|?38年NBA最佳球員分析?|? ?從萬眾期待到口碑撲街!唐探3令人失望? |?笑看新倚天屠龍記?|?燈謎答題王?|用Python做個海量小姐姐素描圖?|碟中諜這么火,我用機(jī)器學(xué)習(xí)做個迷你推薦系統(tǒng)電影


          趣味:彈球游戲? |?九宮格? |?漂亮的花?|?兩百行Python《天天酷跑》游戲!


          AI:?會做詩的機(jī)器人?|?給圖片上色?|?預(yù)測收入?|?碟中諜這么火,我用機(jī)器學(xué)習(xí)做個迷你推薦系統(tǒng)電影


          小工具:?Pdf轉(zhuǎn)Word,輕松搞定表格和水??!?|?一鍵把html網(wǎng)頁保存為pdf!|??再見PDF提取收費(fèi)!?|?用90行代碼打造最強(qiáng)PDF轉(zhuǎn)換器,word、PPT、excel、markdown、html一鍵轉(zhuǎn)換?|?制作一款釘釘?shù)蛢r機(jī)票提示器!?|60行代碼做了一個語音壁紙切換器天天看小姐姐!



          年度爆款文案

          點(diǎn)閱讀原文,看B站我的視頻

          瀏覽 66
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  伊人久久艹 | 婷婷国产精品免费视频 | 西西444WWW无码高清视频 | 五月天成人在线视频免费播放 | 真人视频,一级A片 |