urllib實戰----使用代理服務器爬取網頁(021)

一:代理服務器:

代理服務器是處於我們互聯網中間的服務器,如果使用代理服務器,我們在瀏覽信息的時候先向代理服務器發出請求,然後由代理服務器向互聯網獲取信息,再返回給我們。

如果我們訪問互聯網絡,就是直接訪問,互聯網服務器有信息之後就會把信息返回給用戶,這時候容易獲取到信息,但是如果你的ip地址在某段時間內大量的訪問,則服務器就會覺得你是惡意攻擊,就會把你的ip封掉。這時訪問服務器時則爬取不到任何東西。ip一般來說是固定的,如果是APN撥號的話,每撥號一次換一個ip,但是也有一定的問題,撥號也要成本,並且撥號的ip地址很相近,那麼人家就會把一堆ip給封掉。現在我們有代理服務器,提供你瀏覽網頁,首先給代理服務器發送請求,代理服務器向互聯網獲取信息,互聯網返回給代理服務器,代理服務器則會返回給我們。此時,網絡的ip地址是代理服務器的,那麼我們就可以用多個不同的代理服務器爬取多個網站。這樣就不會被封掉ip了。

二:實戰

(1)找到代理ip,http://www.xicidaili.com 中有大量的代理ip


爬取百度網頁的代碼:


注意:如果現實連接失敗是因爲ip代理服務器地址失效了,需要重新刷新獲取代理ip


三:綜上述代碼:

from urllib import request
#設置一個自定義函數,可以在函數中實現ip代理的功能,以後可以直接調用這個功能
#ProxyHandler方法裏面是一個字典,http://www.xicidaili.com 中有大量的代理ip
#互聯網默認端口80
proxy_addr="119.28.112.130:3128"
url="http://www.baidu.com"
def use_proxy(url,proxy_addr):
   proxy=request.ProxyHandler({"http":proxy_addr})
   #添加代理ip
   opener=request.build_opener(proxy,request.HTTPHandler)
  #將 opener安裝爲全局
   request.install_opener(opener)
   request.urlopen(url).read().decode("utf-8","ignore")
   return data

#調用
data=use_proxy(url,proxy_addr)
print(len(data))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章