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和perl实现批量对目录下电子书文件重命名的代码分享
Nov 21 Python
Python函数中的函数(闭包)用法实例
Mar 15 Python
python+selenium开发环境搭建图文教程
Aug 11 Python
老生常谈Python startswith()函数与endswith函数
Sep 08 Python
Python实现JSON反序列化类对象的示例
Jan 31 Python
使用pandas实现csv/excel sheet互相转换的方法
Dec 10 Python
pandas ix &iloc &loc的区别
Jan 10 Python
Python学习笔记基本数据结构之序列类型list tuple range用法分析
Jun 08 Python
python模块hashlib(加密服务)知识点讲解
Nov 25 Python
python小白学习包管理器pip安装
Jun 09 Python
浅谈TensorFlow之稀疏张量表示
Jun 30 Python
python操作ini类型配置文件的实例教程
Oct 30 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
Linux下实现PHP多进程的方法分享
2012/08/16 PHP
php中将字符串转为HTML的实体引用的一个类
2013/02/03 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
2013/06/03 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
2014/06/09 PHP
PHP中SSO Cookie登录分析和实现
2015/11/06 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
2016/11/01 PHP
CI框架实现框架前后端分离的方法详解
2016/12/30 PHP
求得div 下 img的src地址的js代码
2007/02/28 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
JS 打印界面的CSS居中代码适用所有浏览器
2014/03/19 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
2016/05/27 Javascript
vue.js中指令Directives详解
2017/03/20 Javascript
原生JS实现的双色球功能示例
2018/02/02 Javascript
webpack之devtool详解
2018/02/10 Javascript
jQuery实现图片上传预览效果功能完整实例【测试可用】
2018/05/28 jQuery
vue实现密码显示与隐藏按钮的自定义组件功能
2019/04/23 Javascript
vue下axios拦截器token刷新机制的实例代码
2020/01/17 Javascript
python3抓取中文网页的方法
2015/07/28 Python
pycham查看程序执行的时间方法
2018/11/29 Python
python实现DEM数据的阴影生成的方法
2019/07/23 Python
DataFrame.to_excel多次写入不同Sheet的实例
2019/12/02 Python
Django+RestFramework API接口及接口文档并返回json数据操作
2020/07/12 Python
Django如何在不停机的情况下创建索引
2020/08/02 Python
Python实现像awk一样分割字符串
2020/09/15 Python
HTML5单选框、复选框、下拉菜单、文本域的实现代码
2020/12/01 HTML / CSS
HomeAway的巴西品牌:Alugue Temporada
2018/04/10 全球购物
康帕斯酒店预订:Compass Hospitality(支持中文)
2018/08/23 全球购物
"引用"与指针的区别是什么
2016/09/07 面试题
小学门卫岗位职责
2013/12/17 职场文书
学生周末长期请假条
2014/02/15 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
办公室文员工作自我鉴定
2014/09/19 职场文书
2014年导购员工作总结
2014/11/18 职场文书
美丽心灵观后感
2015/06/01 职场文书
个人工作总结(管理人员)范文
2019/08/13 职场文书
Python 居然可以在 Excel 中画画你知道吗
2022/02/15 Python