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实现斐波那契递归函数的方法
Sep 08 Python
Python中用PIL库批量给图片加上序号的教程
May 06 Python
Python实现二叉堆
Feb 03 Python
Python注释详解
Jun 01 Python
关于Python 3中print函数的换行详解
Aug 08 Python
在java中如何定义一个抽象属性示例详解
Aug 18 Python
深入了解Python iter() 方法的用法
Jul 11 Python
python实现画出e指数函数的图像
Nov 21 Python
Python 实现自动获取种子磁力链接方式
Jan 16 Python
python设置环境变量的作用整理
Feb 17 Python
通过实例解析python创建进程常用方法
Jun 19 Python
TensorFlow中tf.batch_matmul()的用法
Jun 02 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变量范围介绍
2012/10/15 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
2015/12/02 PHP
php 策略模式原理与应用深入理解
2019/09/25 PHP
php适配器模式简单应用示例
2019/10/23 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
javascript实用小函数使用介绍
2013/11/11 Javascript
node.js中的path.join方法使用说明
2014/12/08 Javascript
javascript实现动态标签云
2015/10/16 Javascript
12种JavaScript常用的MVC框架比较分析
2015/11/16 Javascript
原生JavaScript实现滚动条效果
2020/03/24 Javascript
BootStrap table表格插件自适应固定表头(超好用)
2016/08/24 Javascript
Vue.JS入门教程之列表渲染
2016/12/01 Javascript
jQuery快速高效制作网页交互特效
2017/02/24 Javascript
Mac系统下Webstorm快捷键整理大全
2017/05/28 Javascript
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
微信小程序引用公共js里的方法的实例详解
2017/08/17 Javascript
webpack4打包vue前端多页面项目
2018/09/17 Javascript
elementUI select组件默认选中效果实现的方法
2019/03/25 Javascript
axios 实现post请求时把对象obj数据转为formdata
2019/10/31 Javascript
教你安装python Django(图文)
2013/11/04 Python
用Python写冒泡排序代码
2016/04/12 Python
Python爬取网易云音乐热门评论
2017/03/31 Python
matplotlib简介,安装和简单实例代码
2017/12/26 Python
python实现随机漫步算法
2018/08/27 Python
Python列表(List)知识点总结
2019/02/18 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
详解CSS3中border-image的使用
2015/07/18 HTML / CSS
卡西欧B级产品官方网站:Casio Outlet
2018/05/22 全球购物
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
如何启动时不需输入用户名与密码
2014/05/09 面试题
武汉某公司的C#笔试题面试题
2015/12/25 面试题
企业安全生产责任书
2014/04/14 职场文书
大学新闻系自荐书
2014/05/31 职场文书
建筑管理专业求职信
2014/07/28 职场文书
2015年度销售个人工作总结
2015/03/31 职场文书
2015年财务经理工作总结
2015/05/13 职场文书