urllib2使用初探

2022-07-30 08:21:18 字數 3464 閱讀 2994

在入門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: 頭部

import

urllib2

url = '

'req =urllib2.request(url) # 建立乙個請求物件

response =urllib2.urlopen(req) # 返回乙個相關請求的response物件

urlcontent = response.read()

2. cookielib模組cookielib主要用於提供可儲存cookie的物件, 以便於urllib2模組進行配合來訪問網頁的資料. jar的中文翻譯為"檔案" 

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例項.

下面是從網上找到的登入人人網的**:

#

! /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")

headers: 兩個詞之間用 - 分隔.post_data:

[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就是乙個構造好的請求。...