Python開發 urllib2異常處理

2021-07-23 05:01:07 字數 3237 閱讀 2207

一、urllib2模組回顧

urllib2模組中最重要的函式是urlopen()函式,用於獲取urls資源(uniform resorce locators)。urlopen函式不僅可以用於簡單的情況,還可以進行複雜情況下的資源獲取如認證(authentication)、cookies、**等。urlopen支援多種協議,如http、ftp、file等。

http是基於請求、響應的協議,客戶端發出請求、伺服器端作出響應。urllib2通過request物件反映發出的http請求,呼叫urlopen()時就會發出請求,函式返回值就是相應的響應物件。

1、post資料

import urllib,urllib2

url=""

datas=

req=urllib2.request(url,urllib.encode(datas))

response=urllib2.urlopen(req)

2、增加header頭部

由於一些**不希望被程式訪問,或**會傳送不同的內容給不同的瀏覽器型別,因此需要修改http頭部來將程式偽造成相應的瀏覽器,而瀏覽器通常通過頭部的user-agent來識別,因此通常只改user-agent即可。方法是傳遞乙個headers頭部字典給request物件。

import urllib2

url=""

headers=

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

response=urllib2.urlopen(req)

二、異常處理

當urlopen()不能處理響應時會引起urlerror異常。httperror異常是urlerror的乙個子類,只有在訪問http型別的url時才會引起。

1、urlerror異常

通常引起urlerror的原因是:無網路連線(沒有到目標伺服器的路由)、訪問的目標伺服器不存在。在這種情況下,異常物件會有reason屬性(是乙個(錯誤碼、錯誤原因)的元組)。

每乙個從伺服器返回的http響應都有乙個狀態碼。其中,有的狀態碼表示伺服器不能完成相應的請求,預設的處理程式可以為我們處理一些這樣的狀態碼(如返回的響應是重定向,urllib2會自動為我們從重定向後的頁面中獲取資訊)。有些狀態碼,urllib2模組不能幫我們處理,那麼urlopen函式就會引起httperror異常,其中典型的有404/401。

httperror異常的例項有整數型別的code屬性,表示伺服器返回的錯誤狀態碼。

urllib2模組預設的處理程式可以處理重定向(狀態碼是300範圍),而且狀態碼在100-299範圍內表示成功。因此,能夠引起httperror異常的狀態碼範圍是:400-599.

當引起錯誤時,伺服器會返回http錯誤碼和錯誤頁面。你可以將htperror例項作為返回頁面,這意味著,httperror例項不僅有code屬性,還有read、geturl、info等方法。

3、總結

如果想在**中處理urlerror和httperror有兩種方法,**如下:

#! /usr/bin/env python

#coding=utf-8

import urllib2

url="******"

#需要訪問的url

try:

response=urllib2.urlopen(url)

except urllib2.httperror,e: #httperror必須排在urlerror的前面

print

"the server couldn't fulfill the request"

print

"error code:",e.code

print

"return content:",e.read()

except urllib2.urlerror,e:

print

"failed to reach the server"

print

"the reason:",e.reason

else:

#something you should do

pass

#其他異常的處理

#需要訪問的url

try:

response=urllib2.urlopen(url)

except urllib2.urlerror,e:

if hasattr(e,"reason"):

print

"failed to reach the server"

print

"the reason:",e.reason

elif hasattr(e,"code"):

print

"the server couldn't fulfill the request"

print

"error code:",e.code

print

"return content:",e.read()

else:

pass

#其他異常的處理

相比較而言,第二種異常處理方法更優。

PYTHON學習筆記之URLLIB2

python 2.7.5 urllib2.request url data headers origin req host unverifiable 的方法有add data data get method has data get data add header key,val add unred...

把玩之python爬蟲urllib2

1,什麼是urllib2庫?urllib2是python的乙個獲取urls的元件,通過urlopen函式的形式來提供了乙個非常簡單的介面,根據不同協議獲取urls的能力,urllib2提供了乙個比較復 雜的介面來處理情況,例如 基礎驗證,cookies,和其他。我們分析 response urlli...

Python學習urllib2模組使用

urllib包和urllib2包基於httplib包之上,提供高層次的抽象,用於處理url請求,urllib 和 urllib2 可以更方便地進行 http get 和 post 等各種操作。1 urllib2.request url data headers 傳送請求,建立request後,還可以...