Python使用urlretrieve实现直接远程下载图片的示例代码
本文介绍如何在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远程下载相关内容,请查阅本站过往文章或继续浏览后续教程,感谢大家的支持。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













