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编程中对文件和存储器的读写示例
Jan 25 Python
Python random模块用法解析及简单示例
Dec 18 Python
python高阶爬虫实战分析
Jul 29 Python
python与caffe改变通道顺序的方法
Aug 04 Python
python求最大值最小值方法总结
Jun 25 Python
Django如何简单快速实现PUT、DELETE方法
Jul 24 Python
pytorch 输出中间层特征的实例
Aug 17 Python
决策树剪枝算法的python实现方法详解
Sep 18 Python
NumPy统计函数的实现方法
Jan 21 Python
简单了解django文件下载方式
Feb 10 Python
Python pymsql模块的使用
Sep 07 Python
Lombok插件安装(IDEA)及配置jar包使用详解
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
与数据库连接
2006/10/09 PHP
JpGraph php柱状图使用介绍
2011/08/23 PHP
PHP新手用的Insert和Update语句构造类
2012/03/31 PHP
discuz图片顺序混乱解决方案
2015/07/29 PHP
分享五个PHP7性能优化提升技巧
2015/12/07 PHP
用方法封装javascript的new操作符(一)
2010/12/25 Javascript
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
javascript基本类型详解
2014/11/28 Javascript
jquery简单图片切换显示效果实现方法
2015/01/14 Javascript
详解JavaScript的流程控制语句
2015/11/30 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
javascript闭包概念简单解析(推荐)
2016/06/03 Javascript
JavaScript实现页面无操作倒计时退出
2016/10/22 Javascript
微信小程序 点击控件后选中其它反选实例详解
2017/02/21 Javascript
使用prop解决一个checkbox选中后再次选中失效的问题
2017/07/05 Javascript
详解vue-cli项目中用json-sever搭建mock服务器
2017/11/02 Javascript
vue最简单的前后端交互示例详解
2018/10/11 Javascript
vue实现的下拉框功能示例
2019/01/29 Javascript
用Cordova打包Vue项目的方法步骤
2019/02/02 Javascript
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
2019/09/11 Javascript
9种方法优化jQuery代码详解
2020/02/04 jQuery
jQuery 选择方法及$(this)用法实例分析
2020/05/19 jQuery
python高并发异步服务器核心库forkcore使用方法
2013/11/26 Python
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
解决Pycharm出现的部分快捷键无效问题
2018/10/22 Python
python根据文本生成词云图代码实例
2019/11/15 Python
Django将默认的SQLite更换为MySQL的实现
2019/11/18 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
2020/06/04 Python
Python Django中间件使用原理及流程分析
2020/06/13 Python
女大学生个人求职信
2013/12/09 职场文书
广告创意求职信
2014/03/17 职场文书
气象学专业个人求职信
2014/04/22 职场文书
《李广射虎》教学反思
2014/04/27 职场文书
四风问题对照检查材料整改措施
2014/09/27 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
老人节主持词
2015/07/04 职场文书