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获取文件ssdeep值的方法
Oct 05 Python
Python实现TCP协议下的端口映射功能的脚本程序示例
Jun 14 Python
python机器学习之神经网络(一)
Dec 20 Python
基于Python实现的ID3决策树功能示例
Jan 02 Python
Python迭代器与生成器基本用法分析
Jul 26 Python
Python实现查找数组中任意第k大的数字算法示例
Jan 23 Python
Python中字符串String的基本内置函数与过滤字符模块函数的基本用法
May 27 Python
Python实现的企业粉丝抽奖功能示例
Jul 26 Python
pytorch GAN生成对抗网络实例
Jan 10 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
Mar 09 Python
python调用摄像头的示例代码
Sep 28 Python
pycharm使用技巧之自动调整代码格式总结
Nov 04 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 IF ELSE简化/三元一次式的使用
2011/08/22 PHP
ajax取消挂起请求的处理方法
2013/03/18 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
关于Laravel Route重定向的一个注意点
2017/01/16 PHP
PHP中单例模式与工厂模式详解
2017/02/17 PHP
打造个性化的功能强大的Jquery虚拟键盘(VirtualKeyboard)
2014/10/11 Javascript
js实现带按钮的上下滚动效果
2015/05/12 Javascript
JavaScript 正则表达式中global模式的特性
2016/02/25 Javascript
微信小程序三级联动地址选择器的实例代码
2017/07/12 Javascript
原生javascript实现文件异步上传的实例讲解
2017/10/26 Javascript
Vue中 key keep-alive的实现原理
2018/09/18 Javascript
详解jQuery获取特殊属性的值以及设置内容
2018/11/14 jQuery
Vue 3.0 前瞻Vue Function API新特性体验
2019/08/12 Javascript
原生js实现表格循环滚动
2020/11/24 Javascript
python里对list中的整数求平均并排序
2014/09/12 Python
浅析AST抽象语法树及Python代码实现
2016/06/06 Python
Python正则表达式匹配中文用法示例
2017/01/17 Python
基于Python的XSS测试工具XSStrike使用方法
2017/07/29 Python
django主动抛出403异常的方法详解
2019/01/04 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
2019/08/12 Python
Python龙贝格法求积分实例
2020/02/29 Python
Python引入多个模块及包的概念过程解析
2020/09/21 Python
python中doctest库实例用法
2020/12/31 Python
python将YUV420P文件转PNG图片格式的两种方法
2021/01/22 Python
html5新特性与用法大全
2018/09/13 HTML / CSS
水芝澳美国官网:H2O Plus
2016/10/15 全球购物
Boda Skins皮衣官网:奢侈皮夹克,全球配送
2016/12/15 全球购物
匡威比利时官网:Converse Belgium
2017/04/13 全球购物
error和exception有什么区别
2012/10/02 面试题
第二层交换机和路由器的区别?第三层交换机和路由器的区别?
2013/05/23 面试题
操行评语大全
2014/04/30 职场文书
2014年组织委员工作总结
2014/12/01 职场文书
社区党务工作总结2015
2015/05/19 职场文书
基层医务人员三严三实心得体会
2016/01/05 职场文书
python 模块重载的五种方法
2021/04/24 Python