urllib2中自定義opener


正常用Python抓取網頁信息,需要用到urllib2,調用urllib2.urlopen(url),可以獲得response 反饋信息,再用response.read()即可獲得頁面的源碼。

最簡單的抓包代碼:

import urllib2  
response = urllib2.urlopen('http://www.baidu.com/')  
html = response.read()  
print html

下面來說一說urllib2中的兩個重要概念:Openers和Handlers。

1.Openers:

當你獲取一個URL你使用一個opener(一個urllib2.OpenerDirector的實例)。

正常情況下,我們使用默認opener:通過urlopen。

但你能夠創建個性的openers。

2.Handles:

Openers使用處理器handlers,所有的“繁重”工作由handlers處理。

每個handlers知道如何通過特定協議打開URLs,或者如何處理URL打開時的各個方面。

在你使用代理上網或其他的情況就需要自己創建一個 opener,可以實例化一個OpenerDirector,

然后調用.add_handler(some_handler_instance)。

同樣,可以使用build_opener,這是一個更加方便的函數,用來創建opener對象,他只需要一次函數調用。
build_opener默認添加幾個處理器,但提供快捷的方法來添加或更新默認處理器。

其他的處理器handlers你或許會希望處理代理,驗證,和其他常用但有點特殊的情況。

 

install_opener 用來創建(全局)默認opener。這個表示調用urlopen將使用你安裝的opener。

Opener對象有一個open方法。

該方法可以像urlopen函數那樣直接用來獲取urls:通常不必調用install_opener,除了為了方便。

import urllib2  

proxy_handler = urllib2.ProxyHandler({'http':'http://10.19.110.32:8080/'})

opener = urllib2.build_opener(proxy_handler)

urllib2.install_opener(opener) 

response = urllib2.urlopen('http://www.baidu.com/')  
html = response.read()  
print html
import urllib2  

proxy_handler = urllib2.ProxyHandler({'http':'http://10.19.110.32:8080/'})

opener = urllib2.build_opener(proxy_handler)

response = opener.open('http://www.baidu.com/')  
html = response.read()  
print html

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM