1. 程式人生 > 程式設計 >Python urlopen()和urlretrieve()用法解析

Python urlopen()和urlretrieve()用法解析

這篇文章主要介紹了Python urlopen()和urlretrieve()用法解析,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

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)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。