一、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後,還可以...