引言requests代理IP設(shè)置免費(fèi)代理IP付費(fèi)代理IP代理ip池創(chuàng)建思路引言我們請求一個(gè)網(wǎng)頁時(shí),不僅攜帶著headers等信息,而且會(huì)帶一個(gè)ip地址。如果你一直攜帶著同一個(gè)ip地址,去大量快速請求同一個(gè)域名下的網(wǎng)" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢 在線咨詢
18143453325 在線咨詢
所在位置: 首頁 > 營銷資訊 > 建站知識(shí) > 代理IP設(shè)置

代理IP設(shè)置

時(shí)間:2023-02-10 18:30:01 | 來源:建站知識(shí)

時(shí)間:2023-02-10 18:30:01 來源:建站知識(shí)

本文分為如下部分

引言

我們請求一個(gè)網(wǎng)頁時(shí),不僅攜帶著headers等信息,而且會(huì)帶一個(gè)ip地址。如果你一直攜帶著同一個(gè)ip地址,去大量快速請求同一個(gè)域名下的網(wǎng)頁,網(wǎng)站就會(huì)識(shí)別出這是同一個(gè)人(同一個(gè)ip)在大量請求他的網(wǎng)站,這時(shí)往往會(huì)把你的ip封掉,或者彈出驗(yàn)證碼驗(yàn)證你是不是機(jī)器。

如果試一下用python不加任何約束,成百上千次地循環(huán)訪問豆瓣電影頁面,會(huì)發(fā)現(xiàn)一段時(shí)間后爬蟲報(bào)錯(cuò),無法抓取到信息。這時(shí)如果你用瀏覽器登錄豆瓣的網(wǎng)站,也會(huì)發(fā)現(xiàn)登不進(jìn)去,因?yàn)槟氵@個(gè)ip已經(jīng)被封掉了,無論用python還是瀏覽器請求都沒有用。這時(shí)你如果換一個(gè)wifi,就又可以正常訪問了。

這種反爬蟲方式只有當(dāng)你大規(guī)模抓取網(wǎng)頁時(shí)才會(huì)出現(xiàn),如果你只是想抓取豆瓣top250個(gè)電影信息,請求次數(shù)非常少,則只使用自己的一個(gè)ip就不會(huì)被封。

用python做爬蟲時(shí),要想繞過這道反爬蟲機(jī)制,一般有兩種方法

要想獲得代理ip,主要有兩種途徑,一個(gè)是從免費(fèi)代理ip網(wǎng)站上獲得,另一個(gè)是購買付費(fèi)代理。

就我個(gè)人而言,平時(shí)要抓取的數(shù)據(jù)大都在千或者萬的級別,需要使用代理ip。但是爬蟲只運(yùn)行幾個(gè)小時(shí)也就能結(jié)束了,因此我會(huì)選擇按小時(shí)購買付費(fèi)代理IP。如果數(shù)據(jù)量再大,需要跑幾天幾個(gè)月這種的,使用付費(fèi)代理就比較貴了。

付費(fèi)代理IP比較穩(wěn)定,而且操作比較簡單。下文我們就分別講解付費(fèi)代理IP和免費(fèi)代理IP的設(shè)置。

requests代理IP設(shè)置

首先介紹一個(gè)網(wǎng)站

http://httpbin.org/ip這是一個(gè)ip測試網(wǎng)站,你在瀏覽器打開這個(gè)網(wǎng)址,就可以看到你當(dāng)前使用的ip,比如我的就是

如果你用requests請求的話,得到的也是瀏覽器中顯示的內(nèi)容,表示你這次請求時(shí)的IP

>>> import requests>>> r = requests.get('http://httpbin.org/ip')>>> print(r.text){ "origin": "59.77.43.8"}如果你設(shè)置了一個(gè)代理ip的話,它就會(huì)顯示你設(shè)置的ip,下面我們用requests實(shí)現(xiàn)代理IP設(shè)置

import requests>>> proxies = {... 'http': 'http://180.160.103.185:8118',... 'https': 'https://180.160.103.185:8118'... }>>> r = requests.get('http://httpbin.org/ip', proxies = proxies)>>> print(r.text){ "origin": "180.160.103.185"}其中1180.160.103.185:8118就是我們要找的代理IP,前半部分180.160.103.185是ip,后半部分8118是端口(port),兩者都要有。

上面代碼讀者運(yùn)行多半會(huì)報(bào)錯(cuò),因?yàn)檫@個(gè)代理ip在我寫文章時(shí)有效,在讀者看文章時(shí)多半會(huì)失效了,帶著失效的ip訪問則拋出異常。

下面我們來簡單介紹從免費(fèi)代理網(wǎng)站上獲取代理ip。

免費(fèi)代理IP

免費(fèi)代理IP平臺(tái)非常多,比如西刺、3464網(wǎng)等,他們的樣子都是類似

其中代理ip地址和端口就是我們想要的值。我們可以從這里復(fù)制到我們上面的代碼中,看這個(gè)ip是否有效。測試之后發(fā)現(xiàn)這些免費(fèi)代理ip非常多是無效的(即攜帶它去requests會(huì)報(bào)錯(cuò))

如果我們真的要基于免費(fèi)代理IP進(jìn)行大規(guī)模爬蟲,不可能像上節(jié)那樣一個(gè)個(gè)指定,需要使用爬蟲不斷從免費(fèi)代理網(wǎng)站上抓取這些ip存到數(shù)據(jù)庫中,并經(jīng)常檢驗(yàn)它們是否有效,將無效ip剔除。然后每次請求都自動(dòng)從數(shù)據(jù)庫中提取IP,構(gòu)造proxies變量。這是代理ip池的維護(hù)問題,它的實(shí)現(xiàn)思路會(huì)在本文最后一節(jié)詳細(xì)說。

那么我們?nèi)绻幌胱约航ㄒ粋€(gè)代理IP池,就不能用這些免費(fèi)代理了嗎?

當(dāng)然不是。代理ip池也是有人造好了輪子,比如這個(gè)項(xiàng)目,可以看它的介紹,需要事先如何配置環(huán)境,然后就可以愉快地調(diào)用這些ip了。但是從免費(fèi)代理網(wǎng)站上獲得的IP質(zhì)量一般比較低,很難保證從IP池中提取的IP都是有效的。如果不想再折騰一些異常處理,或者改進(jìn)這個(gè)IP池,就選擇付費(fèi)IP吧。

除此之外,可以參考剛剛這個(gè)項(xiàng)目后面列出的同類項(xiàng)目

我們可以嘗試這些項(xiàng)目哪一個(gè)的效果最好。而且這些項(xiàng)目的源代碼也是學(xué)習(xí)構(gòu)建代理ip池的絕佳材料。

其中這個(gè)項(xiàng)目實(shí)現(xiàn)了用scrapy抓取各大免費(fèi)代理ip平臺(tái),如果不知道有哪些免費(fèi)代理網(wǎng)站,可以看這個(gè)項(xiàng)目寫了對哪些代理ip網(wǎng)站的爬蟲

在我們配置好代理IP之后,可以先多次訪問https://httpbin.org/ip這個(gè)網(wǎng)頁,看是否每一次都使用的是不同ip,然后再去抓取目標(biāo)網(wǎng)站。

付費(fèi)代理IP

我們上文說過,如果不是非常大規(guī)模的抓取,又不想折騰異常處理,最好選用付費(fèi)代理IP。

要想使用付費(fèi)代理IP,首先我們需要知道市面上有哪些平臺(tái)提供,哪個(gè)平臺(tái)比較好,以及各個(gè)平臺(tái)怎么用。

關(guān)于哪些平臺(tái)提供,和各個(gè)平臺(tái)的優(yōu)缺點(diǎn),已經(jīng)有大佬總結(jié)好了,看下面這篇文章

爬蟲代理哪家強(qiáng)?十大付費(fèi)代理詳細(xì)對比評測出爐!

這篇文章對站大爺、芝麻 HTTP 代理、太陽 HTTP 代理、訊代理、快代理、蘑菇代理、阿布云代理、全網(wǎng)代理、云代理、大象代理進(jìn)行了對比評測。

下面我以阿布云和芝麻代理為例講解付費(fèi)代理的使用。

1.阿布云

直接進(jìn)入官網(wǎng),選擇HTTP隧道,我一般使用的是動(dòng)態(tài)版,看下面一張圖

點(diǎn)擊價(jià)格方案,選定后(要登錄后) 立即購買,在里面對應(yīng)位置選購隧道即可,見下面這張圖

購買后可以看到這樣的界面

這里有通行證書和通行密鑰,需要在代碼中填入。下面我們來講一講如何在python中調(diào)用這個(gè)代理IP。

在最開始的界面中選擇接入指南,可以看到下面這個(gè)界面

這里說明了在各個(gè)軟件中如何使用阿布云,我們以python的requests庫為例來看一下(從下面這張圖中可以看到,scrapy等也都是支持的)

我們可以看到,將剛剛獲得的通行證書和通行密鑰放在proxyUserproxyPass兩個(gè)變量中,最后構(gòu)造出一個(gè)proxies作為requests.get的參數(shù),帶著這個(gè)參數(shù)請求網(wǎng)頁即使用了代理IP。

使用阿布云時(shí)要注意(看阿布云的第一張圖),它限制了每秒只能請求5次,所以我們要限制自己的爬蟲速度,如果超過這個(gè)速度,要么購買更多次數(shù),要么降低抓取速度。

2.芝麻代理

在芝麻代理的獲取API選項(xiàng)中,可以先領(lǐng)取免費(fèi)IP來看看這是怎么用的,選好配置后點(diǎn)擊生成API鏈接,得到下圖

點(diǎn)擊打開鏈接可以看到

如果我們請求這個(gè)鏈接,可以得到上述內(nèi)容。

>>> import requests>>> url = 'http://webapi.http.zhimacangku.com/getip?num=5&type=1&pro=&city=0&yys=0&port=1&pack=20005&ts=0&ys=0&cs=0&lb=1&sb=0&pb=4&mr=1&regions='>>> r = requests.get(url)>>> print(r.text)42.242.162.165:1246115.224.69.26:2314115.85.206.211:3012101.205.60.147:7135180.118.33.101:3217芝麻代理沒有像阿布云那么友好,沒有提供配置代碼 只是提供了ip,以API(上面那個(gè)鏈接)的形式發(fā)給我們,我們需要自己去構(gòu)造proxies,用

requests.get(url, proxies = proxies)進(jìn)行請求即可

構(gòu)造proxies的代碼如下

>>> ip = '42.242.162.165:1246'>>> proxies = {'http': 'http://{}'.format(ip),... 'https': 'https://{}'.format(ip)}>>> proxies{'http': 'http://42.242.162.165:1246', 'https': 'https://42.242.162.165:1246'}

代理ip池創(chuàng)建思路

本節(jié)我們只是簡單敘述代理ip池實(shí)現(xiàn)的原理,細(xì)節(jié)部分我會(huì)推薦一些資料供想深入了解的讀者學(xué)習(xí)。

這里我們要搭建的代理ip池最好能像芝麻代理那樣,提供一個(gè)API(那個(gè)鏈接),當(dāng)請求這個(gè)API時(shí),就會(huì)返回一個(gè)代理ip。這樣獲取會(huì)比從數(shù)據(jù)庫中直接抽好。

下面給出一種ip代理池的實(shí)現(xiàn)思路

開啟三個(gè)進(jìn)程

1.爬蟲程序

因?yàn)槊赓M(fèi)IP的可用性都比較低,所以需要用爬蟲抓取大量IP以備用。一般需要對多個(gè)免費(fèi)的代理IP網(wǎng)站分別寫一個(gè)請求、解析的函數(shù),然后同時(shí)運(yùn)行這些爬蟲程序,將抓取到的IP整合到一起,存到數(shù)據(jù)庫中,等待調(diào)用。一般數(shù)據(jù)庫選擇redis。

比如我們要抓取3個(gè)代理ip網(wǎng)站,可以先把3個(gè)爬蟲代碼跑一遍,將三個(gè)網(wǎng)站中所有ip都存到數(shù)據(jù)庫中,然后sleep一段時(shí)間。時(shí)間到時(shí)對數(shù)據(jù)庫中ip數(shù)量進(jìn)行判斷,如果數(shù)量依然很多,則不再抓取,再進(jìn)入sleep;如果ip已經(jīng)不夠了,則在執(zhí)行相同的爬蟲,雖然是抓取和之前相同的網(wǎng)站,但是代理ip網(wǎng)站都是時(shí)刻更新的,這一次訪問就會(huì)獲得很多上一次沒有得到的ip??傊褪歉粢欢螘r(shí)間將所有免費(fèi)ip網(wǎng)站全爬一遍。

這個(gè)思路用代碼呈現(xiàn)是這樣的

while True: if 數(shù)量 < 閾值: crawl time.sleep(100)2.ip檢測程序

要新開一個(gè)進(jìn)程,和上面爬蟲進(jìn)程同時(shí)運(yùn)行,將數(shù)據(jù)庫中的ip提取出來檢驗(yàn)是否有效,將無效ip去除。檢驗(yàn)的方法是用這個(gè)ip去訪問一個(gè)網(wǎng)站,比如百度首頁,看是否返回200等請求成功的狀態(tài)碼,如果返回失敗的狀態(tài)碼,則要從數(shù)據(jù)庫中去除這個(gè)ip。因?yàn)閕p較多,檢驗(yàn)時(shí)可以使用異步等方式加快速度。也是設(shè)置sleep,隔一段時(shí)間檢測一次。

3.API接口服務(wù)

為了讓IP更容易調(diào)用,要設(shè)計(jì)出一個(gè)類似網(wǎng)頁的形式,請求一個(gè)URL就會(huì)獲得一個(gè)IP。可以基于Flask框架,非常簡單易上手。

下面推薦一些學(xué)習(xí)資源

對于基礎(chǔ)讀者,可以先看下面這篇文章

用Flask+Aiohttp+Redis維護(hù)動(dòng)態(tài)代理池

這篇文章詳細(xì)解釋了一個(gè)代理ip池是如何構(gòu)建起來的,有代碼,有解釋,非常適合初學(xué)者學(xué)習(xí)。

如果想對上面的ip池進(jìn)行改進(jìn),可以參考其他代理ip池的項(xiàng)目,比如這個(gè)項(xiàng)目,還有它后面列出的其他項(xiàng)目




專欄信息

專欄主頁:python編程

專欄目錄:目錄

爬蟲目錄:爬蟲系列目錄

版本說明:軟件及包版本說明



關(guān)鍵詞:設(shè)置,代理

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉