urllib2對 url方式的資源處理方法灰常豐富~基本通過handler的組合來實現各種功能~同樣實現根據status code自動redirect和cookies的分析和擷取(根據Http狀態代碼redirect在urllib.FancyUrlOpener中也有實現~)
最step代碼如下:
- import urllib2 as ul2, cookielib as cl, urllib as ul
- cj = cl.CookieJar()
- opener = ul2.build_opener(ul2.HTTPCookieProcessor(cj)) # 這裡可以添加更多的handlers
- # ul2.install_opener(opener) #可以註冊為預設的opener,這樣的話,在後面發送請求時,就可以用 urlopen / urlretrieve 等快捷方法
- #建立並發送一個請求
- req_sohu = urllib2.Request('http://www.sohu.com') # 用Request對象可以發送POST請求,並提供更多參數,如果是Get請求又不需要太複雜的設定,可以直接用
- res_sohu = opener.open(req_sohu)
- content_sohu = res_sohu.read() # 讀取到了所有的response內容
- #相應的http 請求和回應標頭分別在 req_sohu和res_sohu中,可以直接存取並擷取
- #擷取cookies,這個……相當麻煩……不知道有沒有簡便方法……
- cookies = filter(lambda h:isinstance(h, ul2.HTTPCookieProcessor), opener.handlers)[0].cookiejar
cookies中其他內容參見 cookielib.CookieJar
這個cookie在整個opener生存周期內,一直存在,而且自動分析有效期間、域、路徑並維護,非常適合類比登入和抓取,嘿嘿~
------------
標題寫了redirect的……代碼裡沒體現~
在第5行,建立Opener時, ul2.HTTPRedirectHandler是預設被加上的handler之一……
同為預設handler的還有:
ProxyHandler
UnknownHandler
HTTPHandler
HTTPDefaultErrorHandler
HTTPRedirectHandler
FTPHandler
FileHandler
HTTPSHandler
HTTPErrorProcessor
等諸位~