Python使用urlretrieve实现直接远程下载图片的示例代码

Felix
Felix
发布时间:2026-10-14 | 5人浏览过
原创

本文介绍如何在Python中使用urllib模块的urlretrieve函数直接下载远程图片。通过示例演示了如何指定本地保存路径、利用回调函数显示下载进度,以及处理POST数据。代码示例展示了抓取网页图片并保存至本地的完整流程,包含进度监控和文件管理逻辑。

Python urlretrieve远程下载图片概述

在进行爬虫开发时,经常需要将网络上的图片资源保存到本地。除了使用open()函数以二进制模式写入文件外,是否还有其他更简便的方法?本文将演示如何利用urlretrieve来实现远程图片的直接下载。

接下来介绍urllib模块提供的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表示本地保存路径,headers为服务器返回的响应头信息。

以下示例演示了该方法的具体用法,目标是将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)

urlretrieve函数参数详解

代码实现部分如下所示。

代码实现与示例演示

在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 相关产品和应用

全部下载

专题列表