[Python]網路爬蟲(四):Opener與Handler的介紹與實例應用
在開始後面的內容之前,先來解釋一下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()
運行之後可以看到真正的連結指向的網址:
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()
運行的結果如下,可以看到頁面的相關資訊:
重要概念: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的介紹和實例應用的內容,更多相關內容請關注PHP中文網(www.php.cn)!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何利用React和Python建立強大的網路爬蟲應用引言:網路爬蟲是一種自動化程序,用於透過網路抓取網頁資料。隨著網路的不斷發展和數據的爆炸性增長,網路爬蟲越來越受歡迎。本文將介紹如何利用React和Python這兩種流行的技術,建構一個強大的網路爬蟲應用。我們將探討React作為前端框架,Python作為爬蟲引擎的優勢,並提供具體的程式碼範例。一、為

使用Vue.js和Perl語言開發高效的網路爬蟲和資料抓取工具近年來,隨著網路的快速發展和資料的日益重要,網路爬蟲和資料抓取工具的需求也越來越大。在這個背景下,結合Vue.js和Perl語言開發高效率的網路爬蟲和資料抓取工具是個不錯的選擇。本文將介紹如何使用Vue.js和Perl語言開發這樣一個工具,並附上對應的程式碼範例。一、Vue.js和Perl語言的介

網路爬蟲是一種自動化程序,能夠自動存取網站並抓取其中的資訊。這種技術在現今的網路世界中越來越常見,被廣泛應用於資料探勘、搜尋引擎、社群媒體分析等領域。如果你想了解如何使用PHP編寫簡單的網路爬蟲,本文將會為你提供基本的指導和建議。首先,需要了解一些基本的概念和技術。爬取目標在編寫爬蟲之前,需要選擇爬取的目標。這可以是一個特定的網站、一個特定的網頁、或整個互

隨著網路的發展,各種各樣的數據變得越來越容易取得。而網路爬蟲作為一種獲取數據的工具,越來越受到人們的關注與重視。在網路爬蟲中,HTTP請求是一個重要的環節,本文將詳細介紹PHP網路爬蟲常見的HTTP請求方法。一、HTTP請求方法HTTP請求方法是指客戶端向伺服器傳送請求時,所使用的請求方法。常見的HTTP請求方法有GET、POST、PU

如何使用PHP和swoole進行大規模的網路爬蟲開發?引言:隨著網路的快速發展,大數據已成為當今社會的重要資源之一。為了獲得這些寶貴的數據,網路爬蟲應運而生。網路爬蟲可以自動化地存取網路上的各種網站,並從中提取所需的資訊。在本文中,我們將探討如何使用PHP和swoole擴充來開發高效能的、大規模的網路爬蟲。一、了解網路爬蟲的基本原理網路爬蟲的基本原理很簡

隨著網路的快速發展,數據已成為了當今資訊時代最為重要的資源之一。而網路爬蟲作為一種自動化獲取和處理網路數據的技術,也越來越受到人們的關注和應用。本文將介紹如何使用PHP開發簡單的網路爬蟲,並實現自動化取得網路資料的功能。一、網路爬蟲概述網路爬蟲是一種自動化取得和處理網路資源的技術,其主要工作流程是模擬瀏覽器行為,自動存取指定的URL位址並提取所

隨著網路時代的到來,網路資料的爬取與抓取已成為許多人的日常工作。在支援網頁開發的程式語言中,PHP以其可擴展性和易上手的特點,成為了網路爬蟲和資料抓取的熱門選項。本文將從以下幾個面向介紹PHP如何進行網路爬蟲和資料抓取。一、HTTP協定和請求實作在進行網路爬蟲和資料抓取之前,需要對HTTP協定和請求的實作有一定的了解。 HTTP協定是基於請求回應模型的,抓
