Python之爬蟲--ProxyHandler(代理服務器)

       根據上一篇博文User Agent已經設置好了,但是還應該考慮一個問題,程序的運行速度是很快的,如果我們利用一個爬蟲程序在網站爬取東西,一個固定IP的訪問頻率就會很高,這不符合人爲操作的標準,因爲人操作不可能在幾ms內,進行如此頻繁的訪問。所以一些網站會設置一個IP訪問頻率的閾值,如果一個IP訪問頻率超過這個閾值,說明這個不是人在訪問,而是一個爬蟲程序。

    一個很簡單的解決辦法就是設置延時,但是這顯然不符合爬蟲快速爬取信息的目的,所以另一種更好的方法就是使用IP代理。

ProxyHandler處理(代理服務器)

 

  • 使用代理IP,是爬蟲的常用手段
  • 獲取代理服務器的地址:(注意:當然也可以寫個正則表達式從網站直接爬取IP,但是要記住不要太頻繁爬取,加個延時什麼的,太頻繁給服務器帶來壓力了,服務器會直接把你block,不讓你訪問的。編寫代碼訪http://www.whatismyip.com.tw/,該網站是測試自己IP爲多少的網址,服務器會返回訪問者的IP
    • www.xicidaili.com
    • www.goubanjia.com
  • 代理用來隱藏真實訪問中,代理也不允許頻繁訪問某一個固定網站,所以,代理一定要很多很多
  • 基本使用步驟:
    1. 設置代理地址
    2. 創建ProxyHandler:調用urlib.request.ProxyHandler(),proxies參數爲一個字典
    3. 創建Opener:opener = request.build_opener(proxy_handler)
    4. 安裝Opener:request.install_opener(opener)

    使用install_opener方法之後,會將程序默認的urlopen方法替換掉。也就是說,如果使用install_opener之後,在該文件中,再次調用urlopen會使用自己創建好的opener。如果不想替換掉,只是想臨時使用一下,可以使用opener.open(url),這樣就不會對程序默認的urlopen有影響。

 

  • 案例1

案例1: 

'''
使用代理訪問百度網站
'''

from urllib import  request, error

if __name__ == '__main__':

    url = "http://www.baidu.com"

    # 使用代理步驟
    # 1. 設置代理地址
    proxy = {'http': '120.194.18.90:81' }
    # 2. 創建ProxyHandler
    proxy_handler = request.ProxyHandler(proxy)
    # 3. 創建Opener
    opener = request.build_opener(proxy_handler)
    # 4. 安裝Opener
    request.install_opener(opener)

    # 現在如果訪問url,則使用代理服務器
    try:
        rsp = request.urlopen(url)
        html = rsp.read().decode()
        print(html)
    except error.URLError as e:
        print(e)
    except Exception as e:
        print(e)

 

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