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实现一个简单的项目监控
Mar 31 Python
用Python实现一个简单的多线程TCP服务器的教程
May 05 Python
探究Python中isalnum()方法的使用
May 18 Python
CentOS下使用yum安装python-pip失败的完美解决方法
Aug 16 Python
Flask实现图片的上传、下载及展示示例代码
Aug 03 Python
浅谈python新式类和旧式类区别
Apr 26 Python
Python GUI编程 文本弹窗的实例
Jun 11 Python
Python urlopen()和urlretrieve()用法解析
Jan 07 Python
详解python常用命令行选项与环境变量
Feb 20 Python
Python学习之os模块及用法
Jun 03 Python
python能开发游戏吗
Jun 11 Python
用pushplus+python监控亚马逊到货动态推送微信
Jan 29 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下通过QRCode类库创建中间带网站LOGO的二维码
2014/07/12 PHP
PHP中使用json数据格式定义字面量对象的方法
2014/08/20 PHP
PHP中auto_prepend_file与auto_append_file用法实例分析
2014/09/22 PHP
php实现在站点里面添加邮件发送的功能
2020/04/28 PHP
thinkphp 验证码 的使用小结
2017/05/07 PHP
js下用eval生成JSON对象
2010/09/17 Javascript
jQuery 遍历-nextUntil()方法以及prevUntil()方法的使用介绍
2013/04/26 Javascript
使用简洁的jQuery方法实现隔行换色功能
2014/01/02 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
2015/09/06 Javascript
JavaScript实现仿淘宝商品购买数量的增减效果
2016/01/22 Javascript
JS创建事件的三种方法(实例代码)
2016/05/12 Javascript
原生JS实现网络彩票投注效果
2016/09/25 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
2017/02/26 Javascript
JavaScript实现前端分页控件
2017/04/19 Javascript
基于openlayers4实现点的扩散效果
2020/08/17 Javascript
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
Layui实现主窗口和Iframe层参数传递
2019/11/14 Javascript
JS数据类型STRING使用实例解析
2019/12/18 Javascript
深入理解Python中range和xrange的区别
2017/11/26 Python
用python处理图片实现图像中的像素访问
2018/05/04 Python
网红编程语言Python将纳入高考你怎么看?
2018/06/07 Python
对Python 3.2 迭代器的next函数实例讲解
2018/10/18 Python
Tensorflow实现神经网络拟合线性回归
2019/07/19 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
2019/08/02 Python
Python 函数list&read&seek详解
2019/08/28 Python
pytorch 修改预训练model实例
2020/01/18 Python
python 爬取疫情数据的源码
2020/02/09 Python
解决Python 函数声明先后顺序出现的问题
2020/09/02 Python
MySQL面试题目集锦
2016/04/14 面试题
村长党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
收款授权委托书
2014/10/02 职场文书
学生党员检讨书范文
2014/12/27 职场文书
同学聚会通知书
2015/04/20 职场文书
2016春季小学开学寄语
2015/12/03 职场文书
安装Ruby和 Rails的详细步骤
2022/04/19 Ruby