最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中的urllib模塊使用詳解

 更新時(shí)間:2015年07月07日 12:04:15   投稿:goldensun  
這篇文章主要介紹了Python中的urllib模塊使用詳解,是Python入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下

urllib模塊提供的上層接口,使我們可以像讀取本地文件一樣讀取www和ftp上的數(shù)據(jù)。每當(dāng)使用這個(gè)模塊的時(shí)候,老是會(huì)想起公司產(chǎn)品的客戶(hù)端,同事用C++下載Web上的圖片,那種“痛苦”的表情。我以前翻譯過(guò)libcurl教程,這是在C/C++環(huán)境下比較方便實(shí)用的網(wǎng)絡(luò)操作庫(kù),相比起libcurl,Python的urllib模塊的使用門(mén)檻則低多了??赡苡行┤擞謺?huì)用效率來(lái)批評(píng)Python,其實(shí)在操作網(wǎng)絡(luò),或者在集群交互的時(shí)候, 語(yǔ)言的執(zhí)行效率絕不是瓶頸。這種情況下,一個(gè)比較好的方法是,將python嵌入到C/C++中,讓Python來(lái)完成一些不是核心的邏輯處理。又扯遠(yuǎn)了,廢話(huà)少說(shuō),開(kāi)始urllib之旅吧~~ (前幾天我用這個(gè)模塊寫(xiě)了個(gè)蜘蛛,感興趣的同學(xué)可以在以前的博客中找到代碼)

先看一個(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的類(lèi)文件對(duì)象,然后像本地文件一樣操作這個(gè)類(lèi)文件對(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è)類(lèi)文件對(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類(lèi)。作為urllib的使用者,我們很少會(huì)用到這兩個(gè)類(lèi),這里我不想多講。如果對(duì)urllib的實(shí)現(xiàn)感興趣, 或者希望urllib支持更多的協(xié)議,可以研究這兩個(gè)類(lèi)。在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類(lèi)似,但這個(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)單。oh~~yeah~~又一個(gè)模塊寫(xiě)完了,想想,我已經(jīng)寫(xiě)了將近30個(gè)模塊了,有時(shí)間我要好好整理一下@@@@

相關(guān)文章

  • Python讀取英文文件并記錄每個(gè)單詞出現(xiàn)次數(shù)后降序輸出示例

    Python讀取英文文件并記錄每個(gè)單詞出現(xiàn)次數(shù)后降序輸出示例

    這篇文章主要介紹了Python讀取英文文件并記錄每個(gè)單詞出現(xiàn)次數(shù)后降序輸出,涉及Python文件讀取、字符串替換、分割以及字典遍歷、排序等相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • python庫(kù)JsonSchema驗(yàn)證JSON數(shù)據(jù)結(jié)構(gòu)使用詳解

    python庫(kù)JsonSchema驗(yàn)證JSON數(shù)據(jù)結(jié)構(gòu)使用詳解

    這篇文章主要為大家介紹了python庫(kù)JsonSchema驗(yàn)證JSON數(shù)據(jù)結(jié)構(gòu)的使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • django-初始配置(純手寫(xiě))詳解

    django-初始配置(純手寫(xiě))詳解

    這篇文章主要介紹了django-初始配置(純手寫(xiě))詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python實(shí)現(xiàn)自動(dòng)化發(fā)送郵件

    Python實(shí)現(xiàn)自動(dòng)化發(fā)送郵件

    大家好,本篇文章主要講的是Python實(shí)現(xiàn)自動(dòng)化發(fā)送郵件,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下
    2022-01-01
  • python3安裝crypto出錯(cuò)及解決方法

    python3安裝crypto出錯(cuò)及解決方法

    這篇文章主要介紹了python3安裝crypto出錯(cuò)及解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Pandas之MultiIndex對(duì)象的示例詳解

    Pandas之MultiIndex對(duì)象的示例詳解

    這篇文章主要介紹了Pandas之MultiIndex對(duì)象的示例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • pycharm from lxml import etree標(biāo)紅問(wèn)題及解決

    pycharm from lxml import etree標(biāo)紅問(wèn)題及解決

    這篇文章主要介紹了pycharm from lxml import etree標(biāo)紅問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Python數(shù)據(jù)處理利器Pandas?DataFrame常用操作

    Python數(shù)據(jù)處理利器Pandas?DataFrame常用操作

    這篇文章主要為大家介紹了Python數(shù)據(jù)處理利器Pandas?DataFrame,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • python實(shí)現(xiàn)暗通道去霧算法的示例

    python實(shí)現(xiàn)暗通道去霧算法的示例

    這篇文章主要介紹了python實(shí)現(xiàn)暗通道去霧算法的示例,幫助大家更好的利用python處理圖像,感興趣的朋友可以了解下
    2020-09-09
  • 使用Python繪制蛇年春節(jié)祝福藝術(shù)圖

    使用Python繪制蛇年春節(jié)祝福藝術(shù)圖

    這篇文章主要介紹了如何使用Python的Matplotlib庫(kù)繪制一幅富有創(chuàng)意的“蛇年有福”藝術(shù)圖,這幅圖結(jié)合了數(shù)字,蛇形,花朵等裝飾,需要的可以參考下
    2025-01-01

最新評(píng)論

富裕县| 江津市| 临桂县| 昌邑市| 麦盖提县| 宁陕县| 桃园市| 济宁市| 潜山县| 娄底市| 遵化市| 沛县| 安达市| 孝感市| 永昌县| 龙里县| 阜平县| 咸阳市| 卢氏县| 阳曲县| 如皋市| 秦安县| 中超| 巨野县| 娱乐| 阳新县| 福海县| 荣成市| 陇西县| 凤台县| 蒲江县| 西平县| 咸宁市| 缙云县| 南和县| 呼和浩特市| 肇庆市| 大方县| 湄潭县| 东辽县| 宝山区|