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


Posted in Python onAugust 17, 2020

在实现爬虫任务时,经常需要将一些图片下载到本地当中。那么在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远程下载内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python文件夹与文件的操作实现代码
Jul 13 Python
Python实现的随机森林算法与简单总结
Jan 30 Python
基于Python中求和函数sum的用法详解
Jun 28 Python
对python多线程与global变量详解
Nov 09 Python
Python实现的线性回归算法示例【附csv文件下载】
Dec 29 Python
python 实现UTC时间加减的方法
Dec 31 Python
python 猴子补丁(monkey patch)
Jun 26 Python
深入了解Python在HDA中的应用
Sep 05 Python
PyTorch的自适应池化Adaptive Pooling实例
Jan 03 Python
基于Keras的格式化输出Loss实现方式
Jun 17 Python
详解Python中的编码问题(encoding与decode、str与bytes)
Sep 30 Python
python数字图像处理之图像的批量处理
Jun 28 Python
Python 如何查找特定类型文件
Aug 17 #Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
Aug 17 #Python
无需压缩软件,用python帮你操作压缩包
Aug 17 #Python
用Python制作mini翻译器的实现示例
Aug 17 #Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
Aug 17 #Python
pandas apply多线程实现代码
Aug 17 #Python
简述python Scrapy框架
Aug 17 #Python
You might like
PHP下载远程文件到本地存储的方法
2015/03/24 PHP
PHP SPL标准库之SplFixedArray使用实例
2015/05/12 PHP
PHP制作用户注册系统
2015/10/23 PHP
PHP内核学习教程之php opcode内核实现
2016/01/27 PHP
PHP二分查找算法示例【递归与非递归方法】
2016/09/29 PHP
php实现查询功能(数据访问)
2017/05/23 PHP
PHP chr()函数讲解
2019/02/11 PHP
用js重建星际争霸
2006/12/22 Javascript
单击按钮显示隐藏子菜单经典案例
2013/01/04 Javascript
js中如何复制一个对象并获取其所有属性和属性对应的值
2013/10/24 Javascript
jQuery中[attribute!=value]选择器用法实例
2014/12/31 Javascript
jquery可定制的在线UEditor编辑器
2015/11/17 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
2015/12/04 Javascript
全面了解js中的script标签
2016/07/04 Javascript
js实现登录注册框手机号和验证码校验(前端部分)
2017/09/28 Javascript
vue树形结构获取键值的方法示例
2018/06/21 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
Vue中的methods、watch、computed的区别
2018/11/26 Javascript
js防抖和节流的深入讲解
2018/12/06 Javascript
vue+mock.js实现前后端分离
2019/07/24 Javascript
layer父页获取弹出层输入框里面的值方法
2019/09/02 Javascript
Python 绘图和可视化详细介绍
2017/02/11 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
2019/01/15 Python
CSS3的颜色渐变效果的示例代码
2017/09/29 HTML / CSS
大学生毕业自我评价范文分享
2013/11/07 职场文书
医学生自荐信
2013/12/03 职场文书
心碎乌托邦的创业计划书范文
2013/12/26 职场文书
机械制造毕业生求职信
2014/03/03 职场文书
高效课堂标语
2014/06/26 职场文书
班级出游活动计划书
2014/08/15 职场文书
预备党员考察意见范文
2015/06/01 职场文书
孔繁森观后感
2015/06/10 职场文书
详解如何修改nginx的默认端口
2021/03/31 Servers
python scipy 稀疏矩阵的使用说明
2021/05/26 Python
zabbix监控mysql的实例方法
2021/06/02 MySQL
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏