Python中的ProxyHandler處理器有什么用?針對這個問題,這篇文章詳細介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
成都創(chuàng)新互聯(lián)主要從事做網(wǎng)站、成都做網(wǎng)站、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)原陽,十年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):18980820575
在之前的文章中我們帶入了 opener 方法,接下來我們看一下 opener 應(yīng)用中的 ProxyHandler 處理器(代理設(shè)置)。
使用代理IP,這是爬蟲/反爬蟲的第二大招,通常也是最好用的。
很多網(wǎng)站會檢測某一段時間某個IP的訪問次數(shù)(通過流量統(tǒng)計,系統(tǒng)日志等),如果訪問次數(shù)多的不像正常人,它會禁止這個IP的訪問。
所以我們可以設(shè)置一些代理服務(wù)器,每隔一段時間換一個代理,就算IP被禁止,依然可以換個IP繼續(xù)爬取。
urllib.request 中通過ProxyHandler來設(shè)置使用代理服務(wù)器,下面代碼說明如何使用自定義 opener 來使用代理:
import urllib.request # 構(gòu)建了兩個代理Handler,一個有代理IP,一個沒有代理IP httpproxy_handler = urllib.request.ProxyHandler({"https": "27.191.234.69:9999"}) nullproxy_handler = urllib.request.ProxyHandler({}) # 定義一個代理開關(guān) proxySwitch = True # 通過 urllib.request.build_opener()方法使用這些代理Handler對象,創(chuàng)建自定義opener對象 # 根據(jù)代理開關(guān)是否打開,使用不同的代理模式 if proxySwitch: opener = urllib.request.build_opener(httpproxy_handler) else: opener = urllib.request.build_opener(nullproxy_handler) request = urllib.request.Request("http://www.baidu.com/") # 1. 如果這么寫,只有使用opener.open()方法發(fā)送請求才使用自定義的代理,而urlopen()則不使用自定義代理。 response = opener.open(request) # 2. 如果這么寫,就是將opener應(yīng)用到全局,之后所有的,不管是opener.open()還是urlopen() 發(fā)送請求,都將使用自定義代理。 # urllib.request.install_opener(opener) # response = urllib.request.urlopen(request) # 獲取服務(wù)器響應(yīng)內(nèi)容 html = response.read().decode("utf-8") # 打印字符串 print(html)
最終結(jié)果如下:
在上面的代碼第 4 行,我們使用了一個免費的代理 IP,國內(nèi)有很多免費的代理 IP 地址,如下:
西刺免費代理IP
快代理免費代理
Proxy360代理
全網(wǎng)代理IP
但是上面的免費代理只支持短期的,就是說在我們在短期爬取信息或者自己做測試可以去上面找可以使用的,但是如果要是長期的話我們需要自己購買代理 IP 比較穩(wěn)妥。
為了避免我們的代理 IP 被封后爬取失敗,我們可以使用多個代理 Ip,然后不定時切換就可以了,如下:
import urllib.request import random # 代理列表 proxy_list = [ {"http": "27.191.234.69:9999"}, {"http": "27.191.234.69:9999"}, {"http": "27.191.234.69:9999"}, {"http": "27.191.234.69:9999"}, ] # 隨機選擇一個代理 proxy = random.choice(proxy_list) # 使用選擇的代理構(gòu)建代理處理器對象 httpproxy_handler = urllib.request.ProxyHandler(proxy) # 通過 urllib.request.build_opener()方法使用這些代理Handler對象,創(chuàng)建自定義opener對象 opener = urllib.request.build_opener(httpproxy_handler) request = urllib.request.Request("http://www.baidu.com/") response = opener.open(request) html = response.read().decode("utf-8") print(html)
接下來我們看一下自己購買的私密 IP 該如何使用代理。
import urllib.request # 私密代理授權(quán)的賬戶 user = "user" # 私密代理授權(quán)的密碼 passwd = "passwd" # 私密代理 IP proxyserver = "62.151.164.138:12816" # 1. 構(gòu)建一個密碼管理對象,用來保存需要處理的用戶名和密碼 passwdmgr = urllib.request.HTTPPasswordMgrWithDefaultRealm() # 2. 添加賬戶信息,第一個參數(shù)realm是與遠程服務(wù)器相關(guān)的域信息,一般沒人管它都是寫None,后面三個參數(shù)分別是 代理服務(wù)器、用戶名、密碼 passwdmgr.add_password(None, proxyserver, user, passwd) # 3. 構(gòu)建一個代理基礎(chǔ)用戶名/密碼驗證的 ProxyBasicAuthHandler 處理器對象,參數(shù)是創(chuàng)建的密碼管理對象 # 注意,這里不再使用普通 ProxyHandler 類了 proxyauth_handler = urllib.request.ProxyBasicAuthHandler(passwdmgr) # 4. 通過 build_opener()方法使用這些代理 Handler 對象,創(chuàng)建自定義 opener 對象,參數(shù)包括構(gòu)建的 proxy_handler 和 proxyauth_handler opener = urllib.request.build_opener(proxyauth_handler) # 5. 構(gòu)造Request 請求 request = urllib.request.Request("http://www.baidu.com/") # 6. 使用自定義opener發(fā)送請求 response = opener.open(request) # 7. 打印響應(yīng)內(nèi)容 html = response.read().decode("utf-8") print(html)
免費開放代理一般會有很多人都在使用,而且代理有壽命短,速度慢,匿名度不高,HTTP/HTTPS支持不穩(wěn)定等缺點(免費沒好貨)。
專業(yè)爬蟲工程師或爬蟲公司會使用高品質(zhì)的私密代理,這些代理通常需要找專門的代理供應(yīng)商購買,再通過用戶名/密碼授權(quán)使用(舍不得孩子套不到狼)。
關(guān)于Python中的ProxyHandler處理器有什么用問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。
當前文章:Python中的ProxyHandler處理器有什么用
網(wǎng)頁URL:http://bm7419.com/article22/jddccc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、搜索引擎優(yōu)化、外貿(mào)建站、軟件開發(fā)、網(wǎng)站導航、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)