urlib2使用總結

2021-06-27 11:51:35 字數 4360 閱讀 2910

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

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 sys, urllib2

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

)response = urllib2.urlopen(req)

print

"retrieved"

, response.geturl(

)info = response.info(

)for key, value in info.items():

print

"%s = %s"

%(key, value)

html = response.read(

)print html

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

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

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

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:"

, esys.exit(1)

print response.read()

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

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

python利用urlib2進行簡單爬蟲例項

coding utf 8 import urllib import urllib2 import re import thread import time 糗事百科爬蟲練習 糗事百科爬蟲類 class qsbk 初始化方法,定義一些變數 def init self self.pageindex 1 ...

總結urlib,正則相關內容

urllib2是用於獲取urls 統一資源定位符 的乙個python模組。它以urlopen函式的形式提供了非常簡單的介面。能夠使用各種不同的協議來獲取 它還提供乙個稍微複雜的介面用於處理常見的情況 如基本身份驗證 cookies proxies 等。這些是由handlers和openers物件提供...

uni app使用總結(2)

npm install 後報錯 1 sass loader 7.1.0 8.0.0或以上暫時有bug。dev at valuepath.foreach.funcpath 解決 tab methods裡的函式 1 原因 mescroll uni 在 1.1.5 版本在 up 中新增 isbounce ...