在入門urllib2之前,我想應該先調研一下urllib與urllib2的區別[1].首先我們要明白的是,這兩個模組不可以相互替代.兩者都是接受url請求的模組,但是提供了不同的功能,兩個顯著的區別是:
1. 對於乙個url的request,urllib2.urlopen可以接受乙個request類的例項作為引數, 從而設定http請求的headers; 而urllib卻只可以接受乙個url,這意味著你用urllib不能偽裝user agent字串(偽裝成瀏覽器請求).
2. urllib提供了乙個urlencode方法,用來產生get請求字串,而urllib2卻沒有提供這個函式,這也是我們還需要urllib來配合urllib2進行使用的原因之一.
此外,urllib.urlretrieve和urllib.quote等一系列quote和unquote函式沒有被假如到urllib2裡面,因此也需要urllib的協助.
還有一點需要注意的是: requests模組可能urllib2模組要好用,兩者可能學一即可.
1. urllib2.urlopen()函式的使用
urllib2為我們提供了乙個很基礎的函式:urlopen(url[,data,[timeout]]), 來幫助我們通過給定的url來獲取網頁資料(網頁源**), 返回該物件(從裡面可以讀資料);引數url: 可以是包含url的字串, 也可以是urllib2.request類的例項.引數data: 是經過編碼的post資料(可以使用urllib.urlencode()編碼, 注意是urllib裡面的函式).引數timeout: 是可選的超時時間(單位秒), 供所有阻塞操作內部使用.
import urllib2 #讀取的部分內容如下圖所示:url = '
'#待訪問的url
response = urllib2.urlopen(url) #
請求訪問/開啟這個url
urlcontent = response.read() #
讀取內容
再看下面的**, 得到的結果和上面是相同的. http基於請求-應答的機制. 由主機發出請求(request), 然後由伺服器端提**答(urlopen).urllib2.request(url[,data][,headers][,origin_req_host][,unverifiable]),引數url: 請求的**;引數data: post data;引數headers: 頭部
import2. cookielib模組cookielib主要用於提供可儲存cookie的物件, 以便於urllib2模組進行配合來訪問網頁的資料. jar的中文翻譯為"檔案"urllib2
url = '
'req =urllib2.request(url) # 建立乙個請求物件
response =urllib2.urlopen(req) # 返回乙個相關請求的response物件
urlcontent = response.read()
cookiejar
|filecookiejar
/ \
mozillacookiejar lwpcookiejar
1) cookiejar()
管理http cookie的值, 儲存http請求得到的cookie, 向傳出的http請求新增cookie物件.
2) filecookiejar
3) mozilacookiejar(filename, delayload=none, policy=none)
mozila的中文翻譯為"瀏覽器", 建立於瀏覽器cookies.txt相容的filecookiejar例項.
4) lwpcookiejar(filename, delayload=none, policy=none)
建立與libwww-perl的set-cookie3檔案格式相相容的filecookiejar例項.
下面是從網上找到的登入人人網的**:
#headers: 兩個詞之間用 - 分隔.post_data:! /usr/bin/env python
#coding=utf-8
import
urllib2
import
urllib
import
cookielib
#你的使用者名稱和登入密碼
data = #
生成的post_data為: password=123456&email=passbye%40126.com
post_data =urllib.urlencode(data)
#用假如header,需要使用request物件; 對有些header要注意,伺服器會對其進行檢查; 下面偽裝成microsoft ie 6.0 見[2]
headers =
#發出請求
req = urllib2.request("
",post_data,headers)
# 生成乙個帶cookie的opener, opener是urllib2.openerdirector的乙個例項
cj = cookielib.cookiejar() #
建立乙個cookiejar, 還沒有存cookie
handler =urllib2.httpcookieprocessor(cj) # 利用httpcookieprocessor物件來建立cookie處理器
opener = urllib2.build_opener(handler) # 利用build_opener來建立opener
# 這裡的open方法和urlopen使用類似
content = opener.open(req)
print content2.read().decode("
utf-8
").encode("
gbk")
[1] python:difference between urllib and urllib2:
[2] python標準庫urllib2使用細節(文章):
[3] 總結整理時下流行的瀏覽器user-agent大全:
[4] urllib-url handling modules:
urllib2使用總結
urllib2庫是涉及到url資源請求的常用庫 官方文件 urllib2 extensible library for opening urls 常用函式 urllib2.urlopen url data timeout cafile capath cadefault context url 可以是...
urllib2使用總結
urllib2是python的乙個獲取urls的元件。他以urlopen函式的形式提供了乙個非常簡單的介面,具有利用不同協議獲取urls的能力,同樣提供了乙個比較複雜的介面來處理一般情況。urllib2支援獲取不同格式的urls例如 ftp gopher等,並利用它們相關網路協議進行獲取。urlli...
urllib2基本使用例項
示例一 urllib2 基本使用1 import urllib2 req urllib2.request response urllib2.urlopen req html response.read 1 urllib2.request 的功能是構造乙個請求資訊,返回的 req就是乙個構造好的請求。...