最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

零基礎(chǔ)寫python爬蟲之urllib2中的兩個重要概念:Openers和Handlers

 更新時間:2014年11月05日 16:46:06   投稿:hebedich  
文章首先介紹了urllib2的2個方法,然后詳細(xì)介紹了urllib2中的2個重要概念Openers和Handlers的相關(guān)知識,希望能對大家有所幫助

在開始后面的內(nèi)容之前,先來解釋一下urllib2中的兩個個方法:info / geturl
urlopen返回的應(yīng)答對象response(或者HTTPError實例)有兩個很有用的方法info()和geturl()

1.geturl():

這個返回獲取的真實的URL,這個很有用,因為urlopen(或者opener對象使用的)或許會有重定向。獲取的URL或許跟請求URL不同。
以人人中的一個超級鏈接為例,
我們建一個urllib2_test10.py來比較一下原始URL和重定向的鏈接:

復(fù)制代碼 代碼如下:

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() 

運行之后可以看到真正的鏈接指向的網(wǎng)址:

2.info():

這個返回對象的字典對象,該字典描述了獲取的頁面情況。通常是服務(wù)器發(fā)送的特定頭headers。目前是httplib.HTTPMessage 實例。
經(jīng)典的headers包含"Content-length","Content-type",和其他內(nèi)容。
我們建一個urllib2_test11.py來測試一下info的應(yīng)用:

復(fù)制代碼 代碼如下:

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() 

運行的結(jié)果如下,可以看到頁面的相關(guān)信息:

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

1.Openers:

當(dāng)你獲取一個URL你使用一個opener(一個urllib2.OpenerDirector的實例)。
正常情況下,我們使用默認(rèn)opener:通過urlopen。
但你能夠創(chuàng)建個性的openers。

2.Handles:

Openers使用處理器handlers,所有的“繁重”工作由handlers處理。
每個handlers知道如何通過特定協(xié)議打開URLs,或者如何處理URL打開時的各個方面。
例如HTTP重定向或者HTTP cookies。

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

要創(chuàng)建一個 opener,可以實例化一個OpenerDirector,
然后調(diào)用.add_handler(some_handler_instance)。
同樣,可以使用build_opener,這是一個更加方便的函數(shù),用來創(chuàng)建opener對象,他只需要一次函數(shù)調(diào)用。
build_opener默認(rèn)添加幾個處理器,但提供快捷的方法來添加或更新默認(rèn)處理器。
其他的處理器handlers你或許會希望處理代理,驗證,和其他常用但有點特殊的情況。

install_opener 用來創(chuàng)建(全局)默認(rèn)opener。這個表示調(diào)用urlopen將使用你安裝的opener。
Opener對象有一個open方法。
該方法可以像urlopen函數(shù)那樣直接用來獲取urls:通常不必調(diào)用install_opener,除了為了方便。

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

Basic Authentication 基本驗證

為了展示創(chuàng)建和安裝一個handler,我們將使用HTTPBasicAuthHandler。
當(dāng)需要基礎(chǔ)驗證時,服務(wù)器發(fā)送一個header(401錯誤碼) 請求驗證。這個指定了scheme 和一個‘realm',看起來像這樣:Www-authenticate: SCHEME realm="REALM".
例如
Www-authenticate: Basic realm="cPanel Users"
客戶端必須使用新的請求,并在請求頭里包含正確的姓名和密碼。
這是“基礎(chǔ)驗證”,為了簡化這個過程,我們可以創(chuàng)建一個HTTPBasicAuthHandler的實例,并讓opener使用這個handler就可以啦。

HTTPBasicAuthHandler使用一個密碼管理的對象來處理URLs和realms來映射用戶名和密碼。
如果你知道realm(從服務(wù)器發(fā)送來的頭里)是什么,你就能使用HTTPPasswordMgr。

通常人們不關(guān)心realm是什么。那樣的話,就能用方便的HTTPPasswordMgrWithDefaultRealm。
這個將在你為URL指定一個默認(rèn)的用戶名和密碼。
這將在你為特定realm提供一個其他組合時得到提供。
我們通過給realm參數(shù)指定None提供給add_password來指示這種情況。

最高層次的URL是第一個要求驗證的URL。你傳給.add_password()更深層次的URLs將同樣合適。
說了這么多廢話,下面來用一個例子演示一下上面說到的內(nèi)容。
我們建一個urllib2_test12.py來測試一下info的應(yīng)用:

復(fù)制代碼 代碼如下:

  
注意:以上的例子我們僅僅提供我們的HHTPBasicAuthHandler給build_opener。
默認(rèn)的openers有正常狀況的handlers:ProxyHandler,UnknownHandler,HTTPHandler,HTTPDefaultErrorHandler, HTTPRedirectHandler,F(xiàn)TPHandler, FileHandler, HTTPErrorProcessor。
代碼中的top_level_url 實際上可以是完整URL(包含"http:",以及主機名及可選的端口號)。
例如:
http://example.com/。
也可以是一個“authority”(即主機名和可選的包含端口號)。
例如:“example.com” or “example.com:8080”。
后者包含了端口號。

相關(guān)文章

  • Python?pygame新手入門基礎(chǔ)教程

    Python?pygame新手入門基礎(chǔ)教程

    大家都知道pygame是跨平臺Python模塊,專為電子游戲設(shè)計,包含圖像、聲音,這篇文章主要給大家介紹了關(guān)于Python?pygame新手入門基礎(chǔ)教程的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Python try except finally資源回收的實現(xiàn)

    Python try except finally資源回收的實現(xiàn)

    這篇文章主要介紹了Python try except finally資源回收的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • python中的selenium安裝的步驟(瀏覽器自動化測試框架)

    python中的selenium安裝的步驟(瀏覽器自動化測試框架)

    這篇文章主要介紹了python中的selenium安裝的步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • django反向解析和正向解析的方式

    django反向解析和正向解析的方式

    這篇文章主要介紹了django反向解析和正向解析的方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • python KNN算法實現(xiàn)鳶尾花數(shù)據(jù)集分類

    python KNN算法實現(xiàn)鳶尾花數(shù)據(jù)集分類

    這篇文章主要介紹了python KNN算法實現(xiàn)鳶尾花數(shù)據(jù)集分類,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Python迅速掌握語音識別之知識儲備篇

    Python迅速掌握語音識別之知識儲備篇

    語音識別是一門交叉學(xué)科。近二十年來,語音識別技術(shù)取得顯著進步,開始從實驗室走向市場。人們預(yù)計,未來10年內(nèi),語音識別技術(shù)將進入工業(yè)、家電、通信、汽車電子、醫(yī)療、家庭服務(wù)、消費電子產(chǎn)品等各個領(lǐng)域
    2021-11-11
  • Python實用技巧之利用元組代替字典并為元組元素命名

    Python實用技巧之利用元組代替字典并為元組元素命名

    這篇文章主要給大家介紹了關(guān)于Python實用技巧之利用元組代替字典并為元組元素命名的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧
    2018-07-07
  • Python如何查看數(shù)據(jù)的類型

    Python如何查看數(shù)據(jù)的類型

    這篇文章主要介紹了Python如何查看數(shù)據(jù)的類型方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • python基于queue和threading實現(xiàn)多線程下載實例

    python基于queue和threading實現(xiàn)多線程下載實例

    這篇文章主要介紹了python基于queue和threading實現(xiàn)多線程下載實例,是比較實用的技巧,需要的朋友可以參考下
    2014-10-10
  • 使用python?matplotlib畫折線圖實例代碼

    使用python?matplotlib畫折線圖實例代碼

    Matplotlib是一個Python工具箱,用于科學(xué)計算的數(shù)據(jù)可視化,下面這篇文章主要給大家介紹了關(guān)于如何使用python?matplotlib畫折線圖的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04

最新評論

鄂托克前旗| 化州市| 曲麻莱县| 蓬莱市| 广灵县| 庆元县| 萝北县| 扶余县| 错那县| 文山县| 洛川县| 玉山县| 林周县| 富民县| 衡山县| 佛教| 光山县| 山阳县| 四会市| 清河县| 若尔盖县| 文安县| 息烽县| 鸡泽县| 即墨市| 襄垣县| 栾川县| 安岳县| 化隆| 开江县| 镇康县| 苏尼特右旗| 青龙| 白水县| 嵊州市| 乌拉特前旗| 达拉特旗| 秭归县| 赤壁市| 浑源县| 肇东市|