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比较两个列表大小的方法
Jul 11 Python
Swift中的协议(protocol)学习教程
Jul 08 Python
python中scikit-learn机器代码实例
Aug 05 Python
Python中分支语句与循环语句实例详解
Sep 13 Python
python中强大的format函数实例详解
Dec 05 Python
了解不常见但是实用的Python技巧
May 23 Python
python爬虫神器Pyppeteer入门及使用
Jul 13 Python
jenkins配置python脚本定时任务过程图解
Oct 29 Python
python使用列表的最佳方案
Aug 12 Python
实现Python3数组旋转的3种算法实例
Sep 16 Python
Python之京东商品秒杀的实现示例
Jan 06 Python
python爬虫scrapy框架的梨视频案例解析
Feb 20 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
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
2014/07/01 PHP
php函数式编程简单示例
2019/08/08 PHP
JXTree对象,读取外部xml文件数据,生成树的函数
2007/04/02 Javascript
location.href语句与火狐不兼容的问题
2010/07/04 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
2013/01/23 Javascript
jquery 滚动条事件简单实例
2013/07/12 Javascript
页面右下角弹出提示框示例代码js版
2013/08/02 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
2015/02/18 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
原生JS实现循环Nodelist Dom列表的4种方式示例
2018/02/11 Javascript
vue数组对象排序的实现代码
2018/06/20 Javascript
vue中vee validate表单校验的几种基本使用
2018/06/25 Javascript
微信小程序签到功能
2018/10/31 Javascript
微信小程序实现下滑到底部自动翻页功能
2020/03/07 Javascript
js cavans实现静态滚动弹幕
2020/05/21 Javascript
Windows和Linux下Python输出彩色文字的方法教程
2017/05/02 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
python+numpy按行求一个二维数组的最大值方法
2019/07/09 Python
Django中create和save方法的不同
2019/08/13 Python
python 根据网易云歌曲的ID 直接下载歌曲的实例
2019/08/24 Python
Win10里python3创建虚拟环境的步骤
2020/01/31 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
2020/02/13 Python
Python如何将字符串转换为日期
2020/07/31 Python
详解python 支持向量机(SVM)算法
2020/09/18 Python
完美解决torch.cuda.is_available()一直返回False的玄学方法
2021/02/06 Python
澳大利亚小众服装品牌:Maurie & Eve
2018/03/27 全球购物
探索欧洲最好的品牌:Bombinate
2019/06/14 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
安全生产承诺书
2014/03/26 职场文书
社会实践活动总结范文
2014/07/03 职场文书
纪检干部个人对照检查材料
2014/09/23 职场文书
2014年党建工作汇报材料
2014/11/02 职场文书
武夷山导游词
2015/02/03 职场文书
Nginx反爬虫策略,防止UA抓取网站
2021/03/31 Servers