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深入学习之对象的属性
Aug 31 Python
python实现稀疏矩阵示例代码
Jun 09 Python
Python中int()函数的用法浅析
Oct 17 Python
pyspark 读取csv文件创建DataFrame的两种方法
Jun 07 Python
padas 生成excel 增加sheet表的实例
Dec 11 Python
Python微医挂号网医生数据抓取
Jan 24 Python
python获取微信企业号打卡数据并生成windows计划任务
Apr 30 Python
Python3模拟curl发送post请求操作示例
May 03 Python
Python imread、newaxis用法详解
Nov 04 Python
使用TensorFlow-Slim进行图像分类的实现
Dec 31 Python
Django 返回json数据的实现示例
Mar 05 Python
解决Keras 自定义层时遇到版本的问题
Jun 16 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/07/02 PHP
PHP计算加权平均数的方法
2015/07/16 PHP
CodeIgniter辅助之第三方类库third_party用法分析
2016/01/20 PHP
php源码的使用方法讲解
2019/09/26 PHP
jQuery 遍历json数组的实现代码
2020/09/22 Javascript
Javascript 按位左移运算符使用介绍(
2014/02/04 Javascript
Javascript解析URL方法详解
2014/12/05 Javascript
nodejs实现的一个简单聊天室功能分享
2014/12/06 NodeJs
javascript无刷新评论实现方法
2015/05/13 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
javascript每日必学之循环
2016/02/19 Javascript
深入理解javascript中concat方法
2016/12/12 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
vue中的循环对象属性和属性值用法
2020/09/04 Javascript
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
python万年历实现代码 含运行结果
2017/05/20 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
2018/10/14 Python
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
2019/02/07 Python
python ChainMap的使用和说明详解
2019/06/11 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
python调用并链接MATLAB脚本详解
2019/07/05 Python
Python Django实现layui风格+django分页功能的例子
2019/08/29 Python
python实现画出e指数函数的图像
2019/11/21 Python
如何基于Python创建目录文件夹
2019/12/31 Python
python实现图片横向和纵向拼接
2020/03/05 Python
python中列表的含义及用法
2020/05/26 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
详解python metaclass(元类)
2020/08/13 Python
CSS3制作气泡对话框的实例教程
2016/05/10 HTML / CSS
个人查摆剖析材料
2014/02/04 职场文书
2014年教师节寄语
2014/04/03 职场文书
中层干部考核评语
2015/01/04 职场文书
银行反洗钱宣传活动总结
2015/05/08 职场文书
《平行四边形的面积》教学反思
2016/02/16 职场文书