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执行系统命令的常见方法(全)
Oct 22 Python
Python中elasticsearch插入和更新数据的实现方法
Apr 01 Python
Python爬虫框架Scrapy常用命令总结
Jul 26 Python
对pandas中时间窗函数rolling的使用详解
Nov 28 Python
Python中asyncio模块的深入讲解
Jun 10 Python
python字符串分割及字符串的一些常规方法
Jul 24 Python
Flask使用Pyecharts在单个页面展示多个图表的方法
Aug 05 Python
python实现超市商品销售管理系统
Oct 25 Python
python 实现屏幕录制示例
Dec 23 Python
Python + selenium + crontab实现每日定时自动打卡功能
Mar 31 Python
简单了解pytest测试框架setup和tearDown
Apr 14 Python
Python直接赋值及深浅拷贝原理详解
Sep 05 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
在字符串中把网址改成超级链接
2006/10/09 PHP
phpMyAdmin下载、安装和使用入门教程
2007/05/31 PHP
PHP 反射(Reflection)使用实例
2015/05/12 PHP
php实现图片缩略图的方法
2016/03/29 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
2016/05/20 PHP
php下载远程大文件(获取远程文件大小)的实例
2017/06/17 PHP
解析使用JS 清空File控件的路径值
2013/07/08 Javascript
在父页面调用子页面的JS方法
2013/09/29 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
基于jQuery+Cookie实现的防止刷新的在线考试倒计时
2015/06/19 Javascript
js实现网页收藏功能
2015/12/17 Javascript
jquery编写日期选择器
2017/03/16 Javascript
基于js粘贴事件paste简单解析以及遇到的坑
2017/09/07 Javascript
JS+CSS3实现的简易钟表效果示例
2019/04/13 Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
2019/04/24 Javascript
JS实现查找数组中对象的属性值是否存在示例
2019/05/24 Javascript
微信小程序按顺序同步执行的两种方式
2019/12/20 Javascript
Node.js文本文件BOM头的去除方法
2020/11/22 Javascript
[00:31]2016完美“圣”典风云人物:国士无双宣传片
2016/12/04 DOTA
[00:18]天涯墨客三技能展示
2018/08/25 DOTA
Python的for和break循环结构中使用else语句的技巧
2016/05/24 Python
python 接口_从协议到抽象基类详解
2017/08/24 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
2019/08/05 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
ubuntu 安装pyqt5和卸载pyQt5的方法
2020/03/24 Python
python中用ctypes模拟点击的实例讲解
2020/11/26 Python
加拿大国民体育购物网站:National Sports
2018/11/04 全球购物
如何高效率的查找一个月以内的数据
2012/04/15 面试题
高中毕业自我鉴定
2013/12/22 职场文书
明星员工获奖感言
2014/08/14 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
公司处罚决定书
2015/06/24 职场文书
高中数学教学反思范文
2016/02/18 职场文书
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
2022/04/13 Java/Android