<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 代理池!

          共 2398字,需瀏覽 5分鐘

           ·

          2022-05-12 23:42

          ↑?關(guān)注 + 星標(biāo)?,每天學(xué)Python新技能

          后臺(tái)回復(fù)【大禮包】送你Python自學(xué)大禮包


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

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

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

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

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

          那么怎么解決這個(gè)問題呢?

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

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

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

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

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

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

          ProxyPool 簡介

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

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

          獲取項(xiàng)目

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

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

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

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

          安裝依賴

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

          pip install -r requirements.txt

          修改配置文件

          要在本地運(yùn)行項(xiàng)目,我們需要針對(duì)本地環(huán)境修改一些配置。打開項(xiàng)目中的 setting.py 這個(gè)文件,根據(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)。

          啟動(dòng)項(xiàng)目

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

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

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

          python proxyPool.py schedule

          啟動(dòng)之后,你就可以看到如下的控制臺(tái)信息了:

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

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

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

          使用代理 IP

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

          python proxyPool.py server

          啟動(dòng)web服務(wù)后, 默認(rèn)配置下會(huì)開啟 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)目獲取的足夠使用了,但是對(duì)于一些復(fù)雜的爬蟲項(xiàng)目或者商業(yè)項(xiàng)目的話,可能比較夠嗆,畢竟這種爬取的免費(fèi)代理質(zhì)量肯定沒有那么好,不穩(wěn)定是正常的。



          1. Jupyter Lab 十大高生產(chǎn)力插件

          2. 有個(gè)大神級(jí)女朋友是什么體驗(yàn)




          瀏覽 40
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  欧美成人三级在线 | 天堂一级片| 久久中文娱乐网 | 九九九九国产 | 国产精品爽爽久久久久 |