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中argparse模块用法实例详解
Jun 03 Python
python修改字典内key对应值的方法
Jul 11 Python
Python编程实现二叉树及七种遍历方法详解
Jun 02 Python
在Python程序员面试中被问的最多的10道题
Dec 05 Python
python实现kNN算法
Dec 20 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
Feb 11 Python
使用python爬取微博数据打造一颗“心”
Jun 28 Python
Python何时应该使用Lambda函数
Jul 02 Python
Python 进程之间共享数据(全局变量)的方法
Jul 16 Python
python+adb+monkey实现Rom稳定性测试详解
Apr 23 Python
详解python polyscope库的安装和例程
Nov 13 Python
Python将CSV文件转化为HTML文件的操作方法
Jun 30 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采集相关教程之一 CURL函数库
2010/02/15 PHP
PHP学习笔记 (1) 环境配置与代码调试
2011/06/19 PHP
使用ob系列函数实现PHP网站页面静态化
2014/08/13 PHP
如何使用PHP对网站验证码进行破解
2015/09/17 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
JS location几个方法小姐
2008/07/09 Javascript
jQuery获取地址栏参数插件(模仿C#)
2010/10/26 Javascript
javascript 实现字符串反转的三种方法
2013/11/23 Javascript
JavaScript基础知识学习笔记
2014/12/02 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
详解vue事件对象、冒泡、阻止默认行为
2017/03/20 Javascript
详解用函数式编程对JavaScript进行断舍离
2017/09/18 Javascript
探索webpack模块及webpack3新特性
2017/09/18 Javascript
深入理解JavaScript和TypeScript中的class
2018/04/22 Javascript
原生js封装的ajax方法示例
2018/08/02 Javascript
JavaScript遍历DOM元素的常见方式示例
2019/02/16 Javascript
浅谈VUE防抖与节流的最佳解决方案(函数式组件)
2019/05/22 Javascript
基于原生JS封装的Modal对话框插件的示例代码
2020/09/09 Javascript
JSON 入门教程基础篇 json入门学习笔记
2020/09/22 Javascript
[47:18]完美世界DOTA2联赛循环赛 IO vs FTD BO2第一场 11.05
2020/11/06 DOTA
分析在Python中何种情况下需要使用断言
2015/04/01 Python
Python中正则表达式详解
2017/05/17 Python
Python3模拟curl发送post请求操作示例
2019/05/03 Python
python实现对象列表根据某个属性排序的方法详解
2019/06/11 Python
python SQLAlchemy的Mapping与Declarative详解
2019/07/04 Python
给 TensorFlow 变量进行赋值的方式
2020/02/10 Python
CSS3实现时间轴特效
2020/11/02 HTML / CSS
Hunter Boots美国官方网站:赫特威灵顿雨靴
2018/06/16 全球购物
电影开国大典观后感
2015/06/04 职场文书
暂住证证明
2015/06/19 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书
javascript数组includes、reduce的基本使用
2021/07/02 Javascript
JS创建或填充任意长度数组的小技巧汇总
2021/10/24 Javascript
深入理解 Golang 的字符串
2022/05/04 Golang
python playwright之元素定位示例详解
2022/07/23 Python