Python3.x爬蟲---代理伺服器的設定
阿新 • • 發佈:2018-12-16
當使用同一個IP去爬取同一個網站的網頁時,次數多了或者時間久了,該網站伺服器就會對這個IP進行遮蔽,而這也是我們爬蟲程式必須要解決的一個問題。如何去解決這個問題呢?
如果有HTTP基礎,就知道有一種叫做代理伺服器的東西,而我們也可以使用這個代理伺服器解決上述問題。
基本思路:在爬取網頁的時候,在對方伺服器上顯示的是別人的IP地址,那麼,即使對方將顯示出來的這個IP地址進行遮蔽,那麼我們可以再次換另一個IP地址進行網站爬取。
基本原理:使用代理伺服器時,在對方伺服器上顯示的不是我們真實的IP地址,而是代理伺服器的IP地址
一般情況下,我們不僅需要知道IP地址,還需要知道網路埠號,即:IP地址:埠號的形式。
以下是具體程式碼:
#匯入庫 import urllib.request #定義一個函式 def use_proxy(addr,url): """使用代理伺服器 addr:代理伺服器的IP url:要爬取的網頁URL """ #使用urllib.request.ProxyHandler()來設定對應的代理伺服器資訊 proxy=urllib.request.ProxyHandler({'http':addr}) #urllib.request.build_opener()建立一個Opener物件,第一個引數為代理資訊,第二個引數為urllib.request.HTTPHandler opener=urllib.request.build_opener(proxy,urllib.request.HTTPHandler) #使用urllib.request.install_opener(opener),註冊(安裝)opener物件 urllib.request.install_opener(opener) #urllib.request.urlopen(url).read().decode('utf-8')開啟對應的網頁讀取資料,編碼後賦值給變數data data=urllib.request.urlopen(url).read().decode('utf-8') #返回data return data addr="202.75.210.45:8888" data=use_proxy(addr,"http://www.baidu.com") print(data)