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的SimpleHTTPServer源码来解析socket通信
Jun 27 Python
CentOS下使用yum安装python-pip失败的完美解决方法
Aug 16 Python
Python实现将HTML转换成doc格式文件的方法示例
Nov 20 Python
python删除服务器文件代码示例
Feb 09 Python
python将处理好的图像保存到指定目录下的方法
Jan 10 Python
django celery redis使用具体实践
Apr 08 Python
Python判断对象是否为文件对象(file object)的三种方法示例
Apr 26 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
Sep 20 Python
自适应线性神经网络Adaline的python实现详解
Sep 30 Python
python实现mean-shift聚类算法
Jun 10 Python
keras 自定义loss model.add_loss的使用详解
Jun 22 Python
Python页面加载的等待方式总结
Feb 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语言构造器介绍
2013/07/08 PHP
php curl模拟post提交数据示例
2013/12/31 PHP
smarty中post用法实例
2014/11/28 PHP
js对象关系图 方便dom操作
2012/03/18 Javascript
js判断undefined类型,undefined,null, 的区别详细解析
2013/12/16 Javascript
javascript实现window.print()去除页眉页脚
2014/12/30 Javascript
node.js微信公众平台开发教程
2016/03/04 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
利用JS实现页面删除并重新排序功能
2016/12/09 Javascript
jQuery 常见小例汇总
2016/12/14 Javascript
js多个物体运动功能实例分析
2016/12/20 Javascript
Vue学习笔记进阶篇之单元素过度
2017/07/19 Javascript
nodeJS微信分享
2017/12/20 NodeJs
详解ES6中的代理模式——Proxy
2018/01/08 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
新手快速入门微信小程序组件库 iView Weapp
2019/06/24 Javascript
vue data恢复初始化数据的实现方法
2019/10/31 Javascript
Python的面向对象思想分析
2015/01/14 Python
解决Python字典写入文件出行首行有空格的问题
2017/09/27 Python
解决Python安装后pip不能用的问题
2018/06/12 Python
Pandas之ReIndex重新索引的实现
2019/06/25 Python
django mysql数据库及图片上传接口详解
2019/07/18 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
2019/12/13 Python
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
CSS3实现图片抽屉式效果的示例代码
2019/11/06 HTML / CSS
HTML5图片层叠的实现示例
2020/07/07 HTML / CSS
澳大利亚在线家具、灯饰和家居装饰店:LivingStyles
2018/11/20 全球购物
亚洲领先的设计购物网站:Pinkoi
2020/11/26 全球购物
META-INF文件夹中的MANIFEST.MF的作用
2016/06/21 面试题
测绘工程个人的自我评价
2013/11/23 职场文书
库房保管员岗位职责
2014/04/07 职场文书
师德师风自查总结
2014/10/14 职场文书
2015年监理工作总结范文
2015/04/07 职场文书
MySQL修炼之联结与集合浅析
2021/10/05 MySQL
HTML中的表格元素介绍
2022/02/28 HTML / CSS