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使用xmlrpc实例讲解
Dec 17 Python
使用httplib模块来制作Python下HTTP客户端的方法
Jun 19 Python
python实现简单购物商城
May 21 Python
Python 登录网站详解及实例
Apr 11 Python
VScode编写第一个Python程序HelloWorld步骤
Apr 06 Python
postman模拟访问具有Session的post请求方法
Jul 15 Python
使用WingPro 7 设置Python路径的方法
Jul 24 Python
Python如何使用字符打印照片
Jan 03 Python
浅谈keras保存模型中的save()和save_weights()区别
May 21 Python
python爬虫用mongodb的理由
Jul 28 Python
2021年值得向Python开发者推荐的VS Code扩展插件
Jan 25 Python
Python趣味爬虫之用Python实现智慧校园一键评教
May 28 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开发者常犯的10个MySQL错误更正剖析
2012/01/30 PHP
php中通过curl检测页面是否被百度收录
2013/09/27 PHP
php+ajax实现无刷新分页的方法
2014/11/04 PHP
IE与FireFox的兼容性问题分析
2007/04/22 Javascript
来自国外的页面JavaScript文件优化
2010/12/08 Javascript
百度判断手机终端并自动跳转js代码及使用实例
2014/06/11 Javascript
走进javascript——不起眼的基础,值和分号
2017/02/24 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
微信小程序微信支付接入开发实例详解
2017/04/12 Javascript
JavaScript实现打印星型金字塔功能实例分析
2017/09/27 Javascript
探索Vue高阶组件的使用
2018/01/08 Javascript
解决vue-cli + webpack 新建项目出错的问题
2018/03/20 Javascript
jQuery实现的两种简单弹窗效果示例
2018/04/18 jQuery
vue中如何让子组件修改父组件数据
2018/06/14 Javascript
javascript实现自由编辑图片代码详解
2019/06/21 Javascript
vue+render+jsx实现可编辑动态多级表头table的实例代码
2020/04/01 Javascript
[58:11]守擂赛第二周擂主赛 DeMonsTer vs Leopard
2020/04/28 DOTA
python开发的小球完全弹性碰撞游戏代码
2013/10/15 Python
pytorch构建网络模型的4种方法
2018/04/13 Python
Python使用Flask-SQLAlchemy连接数据库操作示例
2018/08/31 Python
基于Python安装pyecharts所遇的问题及解决方法
2019/08/12 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
2019/10/25 Python
Python @property及getter setter原理详解
2020/03/31 Python
python tkinter实现连连看游戏
2020/11/16 Python
Python+Appium实现自动化清理微信僵尸好友的方法
2021/02/04 Python
css3的transform造成z-index无效解决方案
2014/12/04 HTML / CSS
html2canvas生成的图片偏移不完整的解决方法
2020/05/19 HTML / CSS
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
分解成质因数(如435234=251*17*17*3*2,据说是华为笔试题)
2014/07/16 面试题
高校生生产实习自我鉴定
2013/09/21 职场文书
怎样写演讲稿
2014/01/04 职场文书
无房产证房屋转让协议书合同样本
2014/10/18 职场文书
2014财务部年度工作总结
2014/12/08 职场文书
人事专员岗位职责
2015/02/03 职场文书
安阳殷墟导游词
2015/02/10 职场文书
浅谈如何保证Mysql主从一致
2022/03/13 MySQL