Python urllib模組urlopen()與urlretrieve()詳解

來源:互聯網
上載者:User
1.urlopen()方法
urllib.urlopen(url[, data[, proxies]]) :建立一個表示遠程url的類檔案對象,然後像本地檔案一樣操作這個類檔案對象來擷取遠端資料。
參數url表示遠端資料的路徑,一般是網址;
參數data表示以post方式提交到url的資料(玩過web的人應該知道提交資料的兩種方式:post與get。如果你不清楚,也不必太在意,一般情況下很少用到這個參數);
參數proxies用於設定代理。
urlopen返回 一個類檔案對象,它提供了如下方法:
read() , readline() , readlines() , fileno() , close() :這些方法的使用方式與檔案對象完全一樣;
info():返回一個httplib.HTTPMessage 對象,表示遠程伺服器返回的頭資訊
getcode():返回Http狀態代碼。如果是http請求,200表示請求成功完成;404表示網址未找到;
geturl():返回請求的url;
程式碼範例:
複製代碼 代碼如下:


import urllib

url = "http://www.baidu.com/"

#urlopen()
sock = urllib.urlopen(url)
htmlCode = sock.read()
sock.close
fp = open("e:/1.html","wb")
fp.write(htmlCode)
fp.close

#urlretrieve()
urllib.urlretrieve(url, 'e:/2.html')

2.urlretrieve方法
直接將遠端資料下載到本地。
複製代碼 代碼如下:


urllib.urlretrieve(url[, filename[, reporthook[, data]]])
參數說明:
url:外部或者本地url
filename:指定了儲存到本地的路徑(如果未指定該參數,urllib會產生一個臨時檔案來儲存資料);
reporthook:是一個回呼函數,當串連上伺服器、以及相應的資料區塊傳輸完畢的時候會觸發該回調。我們可以利用這個回呼函數來顯示當前的下載進度。
data:指post到伺服器的資料。該方法返回一個包含兩個元素的元組(filename, headers),filename表示儲存到本地的路徑,header表示伺服器的回應標頭。


下面通過例子來示範一下這個方法的使用,這個例子將新浪首頁的html抓取到本地,儲存在D:/sina.html檔案中,同時顯示下載的進度。
複製代碼 代碼如下:


import urllib
def callbackfunc(blocknum, blocksize, totalsize):
'''回呼函數
@blocknum: 已經下載的資料區塊
@blocksize: 資料區塊的大小
@totalsize: 遠程檔案的大小
'''
percent = 100.0 * blocknum * blocksize / totalsize
if percent > 100:
percent = 100
print "%.2f%%"% percent

url = 'http://www.sina.com.cn'
local = 'd:\\sina.html'
urllib.urlretrieve(url, local, callbackfunc)

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.