欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

[Python]網絡爬蟲(四):Opener與Handler的介

系統 1732 0

在開始后面的內容之前,先來解釋一下urllib2中的兩個個方法: info and geturl

urlopen返回的應答對象response(或者HTTPError實例)有兩個很有用的方法info()和geturl()

1.geturl():

這個返回獲取的真實的URL,這個很有用,因為urlopen(或者opener對象使用的)或許 會有重定向。獲取的URL或許跟請求URL不同。

以人人中的一個超級鏈接為例,

我們建一個urllib2_test10.py來比較一下原始URL和重定向的鏈接

    from urllib2 import Request, urlopen, URLError, HTTPError


old_url = 'http://rrurl.cn/b1UZuP'
req = Request(old_url)
response = urlopen(req) 
print 'Old url :' + old_url
print 'Real url :' + response.geturl()

  
運行之后可以看到真正的鏈接指向的網址:

[Python]網絡爬蟲(四):Opener與Handler的介紹和實例應用

2.info():

這個返回對象的字典對象,該字典描述了獲取的頁面情況。通常是服務器發送的特定頭headers。目前是httplib.HTTPMessage 實例。

經典的headers包含"Content-length","Content-type",和其他內容。

我們建一個urllib2_test11.py來測試一下info的應用

    from urllib2 import Request, urlopen, URLError, HTTPError

old_url = 'http://www.baidu.com'
req = Request(old_url)
response = urlopen(req)  
print 'Info():'
print response.info()

  
運行的結果如下,可以看到頁面的相關信息:

[Python]網絡爬蟲(四):Opener與Handler的介紹和實例應用


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

1.Openers:

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

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

但你能夠創建個性的openers。

2.Handles:

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

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

例如HTTP重定向或者HTTP cookies。


如果你希望用特定處理器獲取URLs你會想創建一個openers,例如獲取一個能處理cookie的opener,或者獲取一個不重定向的opener。


要創建一個 opener,可以實例化一個OpenerDirector,

然后調用.add_handler(some_handler_instance)。

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

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


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

Opener對象有一個open方法。

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


說完了上面兩個內容,下面我們來看一下基本認證的內容,這里會用到上面提及的Opener和Handler。

Basic Authentication 基本驗證

為了展示創建和安裝一個handler,我們將使用HTTPBasicAuthHandler。

當需要基礎驗證時,服務器發送一個header(401錯誤碼) 請求驗證。這個指定了scheme 和一個‘realm’,看起來像這樣:Www-authenticate: SCHEME realm="REALM".

例如
Www-authenticate: Basic realm="cPanel Users"

客戶端必須使用新的請求,并在請求頭里包含正確的姓名和密碼。

這是“基礎驗證”,為了簡化這個過程,我們可以創建一個HTTPBasicAuthHandler的實例,并讓opener使用這個 handler就可以啦。


HTTPBasicAuthHandler使用一個密碼管理的對象來處理URLs和realms來映射用戶名和密碼。

如果你知道realm(從服務器發送來的頭里)是什么,你就能使用HTTPPasswordMgr。


通常人們不關心realm是什么。那樣的話,就能用方便的HTTPPasswordMgrWithDefaultRealm。

這個將在你為URL指定一個默認的用戶名和密碼。

這將在你為特定realm提供一個其他組合時得到提供。

我們通過給realm參數指定None提供給add_password來指示這種情況。


最高層次的URL是第一個要求驗證的URL。你傳給.add_password()更深層次的URLs將同樣合適。

說了這么多廢話,下面來用一個例子演示一下上面說到的內容。

我們建一個urllib2_test12.py來測試一下info的應用:

      # -*- coding: utf-8 -*-
import urllib2

# 創建一個密碼管理者
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()

# 添加用戶名和密碼

top_level_url = "http://example.com/foo/"

# 如果知道 realm, 我們可以使用他代替 ``None``.
# password_mgr.add_password(None, top_level_url, username, password)
password_mgr.add_password(None, top_level_url,'why', '1223')

# 創建了一個新的handler
handler = urllib2.HTTPBasicAuthHandler(password_mgr)

# 創建 "opener" (OpenerDirector 實例)
opener = urllib2.build_opener(handler)

a_url = 'http://www.baidu.com/'

# 使用 opener 獲取一個URL
opener.open(a_url)

# 安裝 opener.
# 現在所有調用 urllib2.urlopen 將用我們的 opener.
urllib2.install_opener(opener)

 

    

注意:以上的例子我們 僅僅提供我們的HHTPBasicAuthHandler給build_opener。

默認的openers有正常狀況的handlers:ProxyHandler,UnknownHandler,HTTPHandler,HTTPDefaultErrorHandler, HTTPRedirectHandler,FTPHandler, FileHandler, HTTPErrorProcessor。

代碼中的top_level_url 實際上可以是完整URL(包含"http:",以及主機名及可選的端口號)。

例如:http://example.com/。

也可以是一個“authority”(即主機名和可選的包含端口號)。

例如:“example.com” or “example.com:8080”。

后者包含了端口號。

[Python]網絡爬蟲(四):Opener與Handler的介紹和實例應用


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 色综合久久88中文字幕 | 亚洲韩国精品 | 日韩aⅴ一区二区三区 | 一级黄色免费片 | 国产精品久久一区二区三区 | 日韩 欧美 亚洲国产 | 色婷婷电影 | 国产精选91热在线观看 | 亚洲色色| a视频在线观看免费 | 开心激情综合网 | 国产91高清在线 | 亚洲欧美精品一中文字幕 | 久久久久久久久久久9精品视频 | 四虎综合 | 国产精品你懂的在线播放 | 欧美在线观看一区二区 | 日日碰狠狠躁久久躁婷婷 | 久久久不卡网国产精品一区 | 国产一级大片在线观看 | 久久精品久久精品久久 | 欧美一区二区三区 | 国产欧美一区二区三区在线看 | 国产九九在线视频 | 一级尻逼视频 | 浮力国产第一页 | 91国内精品久久久久免费影院 | 日韩黄色一级毛片 | 91资源在线观看 | 日韩国产欧美视频 | 欧美日韩高清一区 | 免费特黄一级欧美大片在线看 | 久操免费在线视频 | 久久不卡 | 高校处世王| 日本AAAA片毛片免费观 | 天天碰天天操 | 国产成人一区二区三区久久久 | 特级欧美视频aaaaaa | 九色传媒 | 国产99久久精品一区二区永久免费 |