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 05 Python
简单介绍Python中的readline()方法的使用
May 24 Python
python3序列化与反序列化用法实例
May 26 Python
详解python中的json和字典dict
Jun 22 Python
Python 数值区间处理_对interval 库的快速入门详解
Nov 16 Python
Python操作mongodb数据库的方法详解
Dec 08 Python
python实现最小二乘法线性拟合
Jul 19 Python
Python 实现遥感影像波段组合的示例代码
Aug 04 Python
python 内置函数汇总详解
Sep 16 Python
Python表达式的优先级详解
Feb 18 Python
Python restful框架接口开发实现
Apr 13 Python
Python爬取YY评级分数并保存数据实现过程解析
Jun 01 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
锁定年轻人的双倍活力 星巴克推出星倍醇即饮浓咖啡
2021/03/03 咖啡文化
来自phpguru得Php Cache类源码
2010/04/15 PHP
PHP中的strtr函数使用介绍(str_replace)
2011/10/20 PHP
PHP 读取大文件并显示的简单实例(推荐)
2016/08/12 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
2016/09/22 PHP
PHP+Ajax 检测网络是否正常实例详解
2016/12/16 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
2019/10/13 PHP
关于恒等于(===)和非恒等于(!==)
2007/08/20 Javascript
异步加载script的代码
2011/01/12 Javascript
javascript题目,重写函数让其无限相加
2012/02/15 Javascript
基于jquery的固定表头和列头的代码
2012/05/03 Javascript
简介JavaScript中toTimeString()方法的使用
2015/06/12 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
通过JS和PHP两种方法判断用户请求时使用的浏览器类型
2016/09/01 Javascript
layui.js实现的表单验证功能示例
2017/11/15 Javascript
js动态引入的四种方法
2018/05/05 Javascript
vue组件 keep-alive 和 transition 使用详解
2019/10/11 Javascript
[02:33]2018 DOTA2亚洲邀请赛回顾视频 再次拾起那些美妙的时刻
2018/04/10 DOTA
python处理Excel xlrd的简单使用
2017/09/12 Python
python编程培训 python培训靠谱吗
2018/01/17 Python
详解用TensorFlow实现逻辑回归算法
2018/05/02 Python
Python二进制串转换为通用字符串的方法
2018/07/23 Python
使用python将时间转换为指定的格式方法
2018/11/12 Python
Python通用循环的构造方法实例分析
2018/12/19 Python
详解pandas中MultiIndex和对象实际索引不一致问题
2019/07/23 Python
Python猴子补丁知识点总结
2020/01/05 Python
如何使用Python破解ZIP或RAR压缩文件密码
2020/01/09 Python
CSS3中的元素过渡属性transition示例详解
2016/11/30 HTML / CSS
浅谈移动端网页图片预加载方案
2018/11/05 HTML / CSS
Famous Footwear加拿大:美国多品牌运动休闲鞋店
2018/12/05 全球购物
俄罗斯Sportmarket体育在线商店:用于旅游和户外活动
2019/11/12 全球购物
日语专业个人求职信范文
2014/02/02 职场文书
高一语文教学反思
2016/02/16 职场文书
导游词之寿县报恩寺
2020/01/19 职场文书
httpclient调用远程接口的方法
2022/08/14 Java/Android