1. 程式人生 > 程式設計 >Python使用urlretrieve實現直接遠端下載圖片的示例程式碼

Python使用urlretrieve實現直接遠端下載圖片的示例程式碼

在實現爬蟲任務時,經常需要將一些圖片下載到本地當中。那麼在python中除了通過open()函式,以二進位制寫入方式來下載圖片以外,還有什麼其他方式嗎?本文將使用urlretrieve實現直接遠端下載圖片。

下面我們再來看看 urllib 模組提供的 urlretrieve() 函式。urlretrieve() 方法直接將遠端資料下載到本地。

>>> help(urllib.urlretrieve)
Help on function urlretrieve in module urllib:
 
urlretrieve(url,filename=None,reporthook=None,data=None)

引數 finename 指定了儲存本地路徑(如果引數未指定,urllib會生成一個臨時檔案儲存資料。)

引數 reporthook 是一個回撥函式,當連線上伺服器、以及相應的資料塊傳輸完畢時會觸發該回調,我們可以利用這個回撥函式來顯示當前的下載進度。

引數 data 指 post 到伺服器的資料,該方法返回一個包含兩個元素的(filename,headers)元組,filename 表示儲存到本地的路徑,header 表示伺服器的響應頭。

下面通過例子來演示一下這個方法的使用,這個例子將 google 的 html 抓取到本地,儲存在 D:/google.html 檔案中,同時顯示下載的進度。

import urllib
def cbk(a,b,c): 
  '''回撥函式
  @a: 已經下載的資料塊
  @b: 資料塊的大小
  @c: 遠端檔案的大小
  ''' 
  per = 100.0 * a * b / c 
  if per > 100: 
    per = 100 
  print '%.2f%%' % per
url = 'http://www.google.com'
local = 'd://google.html'
urllib.urlretrieve(url,local,cbk)

程式碼實現

在python中除了使用open()函式實現圖片的下載,還可以通過urllib.request模組

中的urlretrieve實現直接遠端下載圖片的操作。以遠端下載某網頁外設產品圖片為例,程式碼如下:

import requests
import urllib.request
import os # 系統模組
import shutil # 資料夾控制


def download_pictures(url):
  headers = {
    "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) "
           "AppleWebKit/537.36 (KHTML,like Gecko) Chrome/81.0.4044.129 Safari/537.36"}
  response = requests.get(url,headers=headers) # 傳送網路請求 獲取響應
  if response.status_code == 200: # 判斷請求是否成功
    # print(response.json())
    # 每次獲取資料之前,先將儲存圖片的資料夾清空 在建立目錄
    if os.path.exists("img_download"): # 判斷資料夾是否存在
      shutil.rmtree("img_download") # 存在則刪除
      os.makedirs("img_download") # 重新建立
    else:
      os.makedirs("img_download") # 不存在 直接建立
    content = response.json()["products"] # 獲取響應內容
    print(content)
    for index,item in enumerate(content):
      # 圖片地址
      img_path = "http://img13.360buyimg.com/n1/s320x320_" + item["imgPath"]
      # print(item["imgPath"])
      # 根據下標命名圖片名稱
      urllib.request.urlretrieve(img_path,"img_download/" + "img" + str(index) + ".jpg")
  else:
    print("請求失敗")


if __name__ == '__main__':
  download_pictures("https://ch.jd.com/hotsale2?cateid=686")

執行結果如下圖所示:

Python使用urlretrieve實現直接遠端下載圖片的示例程式碼

到此這篇關於Python使用urlretrieve實現直接遠端下載圖片的示例程式碼的文章就介紹到這了,更多相關Python urlretrieve遠端下載內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!