urllib2使用總結

2021-07-25 03:14:14 字數 3776 閱讀 3578

urllib2是python的乙個獲取urls的元件。他以urlopen函式的形式提供了乙個非常簡單的介面,具有利用不同協議獲取urls的能力,同樣提供了乙個比較複雜的介面來處理一般情況。

urllib2支援獲取不同格式的urls例如:ftp、gopher等,並利用它們相關網路協議進行獲取。

urllib2可用來完成以下功能:

1.獲取web頁面

2.在遠端http伺服器上驗證

3.額外資料請求,如表單提交(get和post)

4.異常處理

5.非http協議通訊(如ftp)

1.獲取web頁面

例1:列印html頁面,下面是最簡單的形式

!/usr/bin/env python

import urllib2

response = urllib2.urlopen(『

html = response.read()

print html

例2:開啟指定頁面並列印html頁面和一些額外的資訊,採用了urllib2最一般的形式:i、urllib2.request()的功能是構造乙個請求資訊,返回的req就是乙個構造好的請求。ii、urllib2.urlopen()的功能是傳送剛剛構造好的請求req,並返回乙個檔案類的物件response,包括了所有的返回資訊。iii、通過response.read()可以讀取到response裡面的html,通過response.info()可以讀到一些額外的資訊。

#!/usr/bin/env python

import urllib2

response = urllib2.urlopen('')

html = response.read()

print html

2.在遠端http伺服器上驗證

有些站點需要http認證後才能訪問。最普通的認證型別是基本認證,由客戶端向伺服器器傳送乙個使用者名稱和密碼。http認證一般顯示乙個彈出視窗來詢問使用者名稱和密碼,這與基於cookie和form的認證不同。

下面是乙個例子,首先定義了乙個擴充套件urllib2.httppasswordmgr的類,允許在需要的時候詢問使用者名稱和密碼,然後呼叫build_opener()指定一些額外處理,其實在urllib2.urlopen()內部呼叫了build_opener(),並且不帶任何引數。所以在訪問常規**的時候urllib2.urlopen()等於opener.open()返回都一樣。

print response.read()3.表單提交(get和post)

有兩種方法提交表單資料:get和post,取決於html文件中

標籤裡面的引數

get例項:

#!/usr/bin/env python

import sys, urllib2, urllib

keyword = sys.argv[1]

url = url + '?' + urllib.urlencode('', [('query', keyword)])

req = urllib2.request(url)

response = urllib2.urlopen(req)

print response.read()

post例項:

#!/usr/bin/env python

import sys, urllib2, urllib

keyword = sys.argv[1]

url = ''

data = urllib.urlencode([('query', keyword)])

req = urllib2.request(url)

response = urllib2.urlopen(req, data)

更一般的提交資料,通過urllib2.request()構造乙個有額外資料的請求資訊。包括「http header」和想要傳送的資料,這些資料需要被以標準的方式encode,然後作為乙個資料引數傳送給request物件。encoding是在urllib中完成的,而不是在urllib2中完成的。

如下例:

#!/usr/bin/env python

import urllib, urllib2

url = ''

user_agent = 'mozilla/4.0 (compatible; msie 5.5; windows nt)'

values =

headers =

data = urllib.urlencode(values)

req = urllib2.request(url, data, headers)

response = urllib2.urlopen(req)

the_page = response.read()

4.異常處理

捕獲連線錯誤,在和遠端web伺服器建立連線時,很多地方可能出現問題:提供的url不對、url使用了乙個不支援的協議、主機名不存在、訪問不到伺服器或者伺服器針對請求返回乙個錯誤(例如:404)。

任何在連線過程中產生的異常要麼是urllib2.urlerror的例項,要麼是它的乙個子類。

#!/usr/bin/env python

import sys, urllib2

req = urllib2.request(sys.argv[1])

try:

response = urllib2.urlopen(req)

except urllib2.urlerror, e:

print "error retrieving data:", e

sys.exit(1)

print response.read()

5.非http協議通訊(如ftp)

urllib2模組也支援非http協議。預設情況下支援http、ftp、gopher和機器本地硬碟上的檔案,只是response.info()返回的報頭會有所差異。

urllib2使用總結

urllib2庫是涉及到url資源請求的常用庫 官方文件 urllib2 extensible library for opening urls 常用函式 urllib2.urlopen url data timeout cafile capath cadefault context url 可以是...

urllib2使用初探

在入門urllib2之前,我想應該先調研一下urllib與urllib2的區別 1 首先我們要明白的是,這兩個模組不可以相互替代.兩者都是接受url請求的模組,但是提供了不同的功能,兩個顯著的區別是 1.對於乙個url的request,urllib2.urlopen可以接受乙個request類的例項...

urllib2基本使用例項

示例一 urllib2 基本使用1 import urllib2 req urllib2.request response urllib2.urlopen req html response.read 1 urllib2.request 的功能是構造乙個請求資訊,返回的 req就是乙個構造好的請求。...