怎么使用Python中的urllib模塊-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買多久送多久,劃算不套路!

十年的蒼梧網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷型網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整蒼梧建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“蒼梧網(wǎng)站設(shè)計(jì)”,“蒼梧網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

這篇文章運(yùn)用簡(jiǎn)單易懂的例子給大家介紹怎么使用Python中的urllib模塊,代碼非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

urllib模塊提供的上層接口,使我們可以像讀取本地文件一樣讀取www和ftp上的數(shù)據(jù)。

先看一個(gè)例子,這個(gè)例子把Google首頁(yè)的html抓取下來(lái)并顯示在控制臺(tái)上:

# 別驚訝,整個(gè)程序確實(shí)只用了兩行代碼

import urllib
print urllib.urlopen('http://www.google.com').read()

urllib.urlopen(url[, data[, proxies]]) :

創(chuàng)建一個(gè)表示遠(yuǎn)程url的類文件對(duì)象,然后像本地文件一樣操作這個(gè)類文件對(duì)象來(lái)獲取遠(yuǎn)程數(shù)據(jù)。參數(shù)url表示遠(yuǎn)程數(shù)據(jù)的路徑,一般是網(wǎng)址;參數(shù)data表示以post方式提交到url的數(shù)據(jù)(玩過(guò)web的人應(yīng)該知道提交數(shù)據(jù)的兩種方式:post與get。如果你不清楚,也不必太在意,一般情況下很少用到這個(gè)參數(shù));參數(shù)proxies用于設(shè)置代理(這里不詳細(xì)講怎么使用代理,感興趣的看客可以去翻閱Python手冊(cè)u(píng)rllib模塊)。urlopen返回 一個(gè)類文件對(duì)象,他提供了如下方法:

read() , readline() , readlines() , fileno() , close() :這些方法的使用方式與文件對(duì)象完全一樣;

info():返回一個(gè)httplib.HTTPMessage 對(duì)象,表示遠(yuǎn)程服務(wù)器返回的頭信息;

getcode():返回Http狀態(tài)碼。如果是http請(qǐng)求,200表示請(qǐng)求成功完成;404表示網(wǎng)址未找到;

geturl():返回請(qǐng)求的url;

下面來(lái)擴(kuò)充一下上面的例子,看官可以運(yùn)行一下這個(gè)例子,加深對(duì)urllib的印象:

google = urllib.urlopen('http://www.google.com')
print 'http header:/n', google.info()
print 'http status:', google.getcode()
print 'url:', google.geturl()
for line in google: # 就像在操作本地文件
  print line,
google.close()

urllib.urlretrieve(url[, filename[, reporthook[, data]]]):

urlretrieve方法直接將遠(yuǎn)程數(shù)據(jù)下載到本地。參數(shù)filename指定了保存到本地的路徑(如果未指定該參數(shù),urllib會(huì)生成一個(gè)臨時(shí)文件來(lái)保存數(shù)據(jù));參數(shù)reporthook是一個(gè)回調(diào)函數(shù),當(dāng)連接上服務(wù)器、以及相應(yīng)的數(shù)據(jù)塊傳輸完畢的時(shí)候會(huì)觸發(fā)該回調(diào)。我們可以利用這個(gè)回調(diào)函 數(shù)來(lái)顯示當(dāng)前的下載進(jìn)度,下面的例子會(huì)展示。參數(shù)data指post到服務(wù)器的數(shù)據(jù)。該方法返回一個(gè)包含兩個(gè)元素的元組(filename, headers),filename表示保存到本地的路徑,header表示服務(wù)器的響應(yīng)頭。下面通過(guò)例子來(lái)演示一下這個(gè)方法的使用,這個(gè)例子將新浪首頁(yè)的html抓取到本地,保存在D:/sina.html文件中,同時(shí)顯示下載的進(jìn)度。

def cbk(a, b, c):
  '''回調(diào)函數(shù)
  @a: 已經(jīng)下載的數(shù)據(jù)塊
  @b: 數(shù)據(jù)塊的大小
  @c: 遠(yuǎn)程文件的大小
  '''
  per = 100.0 * a * b / c
  if per > 100:
    per = 100
  print '%.2f%%' % per
 
url = 'http://www.sina.com.cn'
local = 'd://sina.html'
urllib.urlretrieve(url, local, cbk)

上面介紹的兩個(gè)方法是urllib中最常用的方法,這些方法在獲取遠(yuǎn)程數(shù)據(jù)的時(shí)候,內(nèi)部會(huì)使用URLopener或者 FancyURLOpener類。作為urllib的使用者,我們很少會(huì)用到這兩個(gè)類,這里我不想多講。如果對(duì)urllib的實(shí)現(xiàn)感興趣, 或者希望urllib支持更多的協(xié)議,可以研究這兩個(gè)類。在Python手冊(cè)中,urllib的作者還列出了這個(gè)模塊的缺陷和不足,感興趣的同學(xué)可以打開(kāi) Python手冊(cè)了解一下。

urllib中還提供了一些輔助方法,用于對(duì)url進(jìn)行編碼、解碼。url中是不能出現(xiàn)一些特殊的符號(hào)的,有些符號(hào)有特殊的用途。我們知道以get方式提交數(shù)據(jù)的時(shí)候,會(huì)在url中添加key=value這樣的字符串,所以在value中是不允許有'=',因此要對(duì)其進(jìn)行編碼;與此同時(shí)服務(wù)器接收到這些參數(shù)的時(shí)候,要進(jìn)行解碼,還原成原始的數(shù)據(jù)。這個(gè)時(shí)候,這些輔助方法會(huì)很有用:

urllib.quote(string[, safe]):對(duì)字符串進(jìn)行編碼。參數(shù)safe指定了不需要編碼的字符;

urllib.unquote(string) :對(duì)字符串進(jìn)行解碼;

urllib.quote_plus(string [ , safe ] ) :與urllib.quote類似,但這個(gè)方法用'+'來(lái)替換' ‘,而quote用'%20′來(lái)代替' ‘

urllib.unquote_plus(string ) :對(duì)字符串進(jìn)行解碼;

urllib.urlencode(query[, doseq]):將dict或者包含兩個(gè)元素的元組列表轉(zhuǎn)換成url參數(shù)。例如 字典{‘name': ‘dark-bull', ‘a(chǎn)ge': 200}將被轉(zhuǎn)換為”name=dark-bull&age=200″

urllib.pathname2url(path):將本地路徑轉(zhuǎn)換成url路徑;

urllib.url2pathname(path):將url路徑轉(zhuǎn)換成本地路徑;

用一個(gè)例子來(lái)體驗(yàn)一下這些方法吧~~:

data = 'name = ~a+3'
 
data1 = urllib.quote(data)
print data1 # result: name%20%3D%20%7Ea%2B3
print urllib.unquote(data1) # result: name = ~a+3
 
data2 = urllib.quote_plus(data)
print data2 # result: name+%3D+%7Ea%2B3
print urllib.unquote_plus(data2)  # result: name = ~a+3
 
data3 = urllib.urlencode({ 'name': 'dark-bull', 'age': 200 })
print data3 # result: age=200&name=dark-bull
 
data4 = urllib.pathname2url(r'd:/a/b/c/23.php')
print data4 # result: ///D|/a/b/c/23.php
print urllib.url2pathname(data4)  # result: D:/a/b/c/23.php

urllib模塊的基本使用,就這么簡(jiǎn)單。

關(guān)于怎么使用Python中的urllib模塊就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

當(dāng)前文章:怎么使用Python中的urllib模塊-創(chuàng)新互聯(lián)
網(wǎng)頁(yè)URL:http://muchs.cn/article22/dsgecc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站微信公眾號(hào)、虛擬主機(jī)、網(wǎng)站策劃軟件開(kāi)發(fā)、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)