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库urllib与urllib2主要区别分析
Jul 13 Python
python 性能优化方法小结
Mar 31 Python
python 定义给定初值或长度的list方法
Jun 23 Python
在python中pandas读文件,有中文字符的方法
Dec 12 Python
在win10和linux上分别安装Python虚拟环境的方法步骤
May 09 Python
深入浅析python3中的unicode和bytes问题
Jul 03 Python
python框架Django实战商城项目之工程搭建过程图文详解
Mar 09 Python
python模拟斗地主发牌
Apr 22 Python
Python实现初始化不同的变量类型为空值
Jun 02 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
Dec 07 Python
如何使用Tkinter进行窗口的管理与设置
Jun 30 Python
python 中yaml文件用法大全
Jul 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编程效率 引入缓存机制提升性能
2010/02/15 PHP
php缓冲 output_buffering和ob_start使用介绍
2014/01/30 PHP
php实现的常见排序算法汇总
2014/09/08 PHP
详解WordPress中添加友情链接的方法
2016/05/21 PHP
PHP最常用的正则表达式
2017/02/13 PHP
MooTools 1.2介绍
2009/09/14 Javascript
小议javascript 设计模式 推荐
2009/10/28 Javascript
Bookmarklet实现启动jQuery(模仿 云输入法)
2010/09/15 Javascript
Jquery的hover方法让鼠标经过li时背景变色
2013/09/06 Javascript
js控制href内容的连接内容的变化示例
2014/04/30 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
2014/06/16 Javascript
Jquery 实现checkbox全选方法
2015/01/28 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
浅谈JavaScript超时调用和间歇调用
2015/08/30 Javascript
浅谈JavaScript中变量和函数声明的提升
2016/08/09 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
深入理解vue中的$set
2017/06/01 Javascript
jQuery实现的上传图片本地预览效果简单示例
2018/03/29 jQuery
JS中移除非数字最多保留一位小数
2018/05/09 Javascript
使用vue-router在Vue页面之间传递数据的方法
2019/07/15 Javascript
vue中keep-alive,include的缓存问题
2019/11/26 Javascript
JS forEach跳出循环2种实现方法
2020/06/24 Javascript
Python3 XML 获取雅虎天气的实现方法
2018/02/01 Python
python树莓派红外反射传感器
2019/01/21 Python
python实现跨年表白神器--你值得拥有
2021/01/04 Python
Laura Mercier官网:彩妆大师罗拉玛斯亚的化妆品牌
2018/01/04 全球购物
伦敦一家领先的精品零售商:IRIS Fashion
2019/05/24 全球购物
美国折扣香水网站:The Perfume Spot
2020/12/12 全球购物
2014道德模范事迹材料
2014/02/16 职场文书
六年级学生评语
2014/04/22 职场文书
公司财务部岗位职责
2015/04/14 职场文书
2015年财政局工作总结
2015/05/21 职场文书
小学英语教学反思范文
2016/02/15 职场文书
超级详细实用的pycharm常用快捷键
2021/05/12 Python
JavaScript高级程序设计之变量与作用域
2021/11/17 Javascript
Java死锁的排查
2022/05/11 Java/Android