用python越久,感覺python的封裝的模組很多,也很實用。
最近嘗試用python指令碼去獲取url頁面資訊,網上可以查到的基本都是用urllib / urllib2 模組,
只是簡單對比了兩種模組,感覺urllib2的功能更全面,實用性更強,決定用urllib2來實現,
urllib2是python的乙個獲取url的元件,以urlopen函式的形式提供了一套介面,具有利用不同協議獲取url的能力
若簡單的訪問網頁,例如:
import urllib2
response = urllib2.urlopen('')
html = response.read()
http是基於請求和應答機制的,即客戶端提出請求,服務端提**答。urllib2用乙個request物件來對映所發出的http請求
import urllib2
req = urllib2.request('')
response = urllib2.urlopen(req)
html = response.read()
在http請求時,允許做額外的兩件事,首先是傳送data表單資料,其次是能夠傳送額外的關於資料或傳送本身的資訊到伺服器,此資料作為http的『headers』來傳送
對於表單資料,在http中,經常使用post請求傳送,通常html表單由瀏覽器來提交,一般在html表單中,data需要編碼成標準形式,然後作為data引數傳到request物件。(encoding是在urllib中完結的,而不是正在urllib2中)
例如:import urllib2
url = ''
values =
data = urllib.urlencode(values)
req = urllib2.request(url, data)
response = urllib2.urlopen(req)
html = response.read()
import urllib
import urllib2
url = ''
user_agent = 'mozilla/4.0 (compatibl; msie 5.5; windows nt)'
values =
headers =
data = urllib.urlencode(values)
req = urllib2.request(url, data, headers)
response = urllib2.urlopen(req)
html = response.read()
urlopen返回的應答物件response有幾個很有用的方法info(),geturl(),getcode()
geturl()用於返回獲取的真實url,因為urlopen或許存在重定向,獲取的url或許跟請求url不同
info()返回物件的字典物件,描述當前獲取的頁面資訊,通常是伺服器傳送的特定頭headers
getcode()返回http response中的狀態碼
當頁面訪問發生錯誤時,該如何進行異常處理,當urlopen不能處理乙個response時,產生urlerror。
通常urlerror在沒有網路連線或者伺服器不存在的情況下產生,這種情況下,異常同樣帶有『reason』的屬性。
import urllib2
req = urllib2.request('')
try: urllib2.urlopen(req)
except urlerror, e:
print e.reason
伺服器上每乙個http應答物件response包含乙個數字『狀態碼』。有時狀態碼指出伺服器無法完成請求,預設urllib2會處理這部分應答(例如:response是乙個重定向,需要客戶端從別的位址獲取文件),其他不能處理的,urlopen會產生乙個httperror(httperror是urlerror的子類)。典型的錯誤包含『404』(頁面無法找到),『403』(請求禁止),『401』(待驗證請求)。所有http錯誤碼參見rfc 2616。
httperror例項產生後會有乙個整型『code』屬性,記錄伺服器傳送的相關錯誤號。當乙個錯誤碼產生後,伺服器返回乙個http錯誤號及乙個錯誤頁面,可以使用httperror例項作為頁面返回的應答物件responsse。這表示和錯誤屬性一樣,其同樣包含了read,geturl,info方法。例如:
需注意的時,except urlerror將同樣接受到httperror異常
Python爬蟲學習 獲取網頁
通過get請求獲取返回的網頁,其中加入了user agent資訊,不然會丟擲 http error 403 forbidden 異常,因為有些 為了防止這種沒有user agent資訊的訪問,會驗證請求資訊中的useragent 它的資訊包括硬體平台 系統軟體 應用軟體和使用者個人偏好 如果user...
Python學習之旅(十九)
1 例項可以隨意新增屬性 2 某個例項繫結的方法對另乙個例項不起作用 3 給類繫結方法市所有類都繫結了該方法,且所有例項都可以呼叫該方法 用 slots 定義屬性反對這個類的例項起作用,但對這個類的子類是不起作用的 class student object slots name age s stud...
python 獲取網頁內容 python
詳細內容 python用做資料處理還是相當不錯的,如果你想要做爬蟲,python是很好的選擇,它有很多已經寫好的類包,只要呼叫,即可完成很多複雜的功能。contents page.read 獲得了整個網頁的內容也就是源 print contents url代表 contents代表 所對應的源 ur...