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迭代器的使用方法实例
Nov 21 Python
Python中将字典转换为XML以及相关的命名空间解析
Oct 15 Python
Python多线程实现同步的四种方式
May 02 Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
Aug 31 Python
python3第三方爬虫库BeautifulSoup4安装教程
Jun 19 Python
使用Python的SymPy库解决数学运算问题的方法
Mar 27 Python
python 整数越界问题详解
Jun 27 Python
简单了解为什么python函数后有多个括号
Dec 19 Python
Python3.6 中的pyinstaller安装和使用教程
Mar 16 Python
python实现暗通道去雾算法的示例
Sep 27 Python
用python对excel进行操作(读,写,修改)
Dec 25 Python
python自然语言处理之字典树知识总结
Apr 25 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 翻页 实例代码
2009/08/07 PHP
php中转义mysql语句的实现代码
2011/06/24 PHP
PHP 二级子目录(后台目录)设置二级域名
2017/03/02 PHP
COM中获取JavaScript数组大小的代码
2009/11/22 Javascript
jquery下组织javascript代码(js函数化)
2010/08/25 Javascript
jQuery.Callbacks()回调函数队列用法详解
2016/06/14 Javascript
bootstrap中添加额外的图标实例代码
2017/02/15 Javascript
JS中的多态实例详解
2017/10/15 Javascript
详解vue.js下引入百度地图jsApi的两种方法
2018/07/27 Javascript
解决vue中虚拟dom,无法实时更新的问题
2018/09/15 Javascript
vue组件之间通信方式实例总结【8种方式】
2019/02/22 Javascript
jquery3和layui冲突导致使用layui.layer.full弹出全屏iframe窗口时高度152px问题
2019/05/12 jQuery
JS实现的字符串数组去重功能小结
2019/06/17 Javascript
24个解决实际问题的ES6代码片段(小结)
2020/02/02 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
用Python中的wxPython实现最基本的浏览器功能
2015/04/14 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
2018/07/16 Python
python中将正则过滤的内容输出写入到文件中的实例
2018/10/21 Python
pycharm修改界面主题颜色的方法
2019/01/17 Python
Python告诉你木马程序的键盘记录原理
2019/02/02 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
python如何实现单链表的反转
2020/02/10 Python
Python IDLE或shell中切换路径的操作
2020/03/09 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
2015/01/01 HTML / CSS
Jo Malone美国官网:祖玛珑香水
2017/03/27 全球购物
英国山地公路自行车商店:Tweeks Cycles
2018/03/16 全球购物
英国现代市场:ARKET
2019/04/10 全球购物
什么是TCP/IP
2014/07/27 面试题
生物技术毕业生自荐信
2013/10/23 职场文书
感恩教育月活动总结
2014/07/07 职场文书
查摆问题整改措施范文
2014/10/11 职场文书
2015高考寄语集锦
2015/02/27 职场文书
简单谈谈Python面向对象的相关知识
2021/06/28 Python
MySQL去除密码登录告警的方法
2022/04/20 MySQL