正常用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