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的类方法和静态方法
Dec 13 Python
Python操作MySQL数据库9个实用实例
Dec 11 Python
利用Python脚本实现ping百度和google的方法
Jan 24 Python
Python中shutil模块的学习笔记教程
Apr 04 Python
django rest framework之请求与响应(详解)
Nov 06 Python
Python实现计算圆周率π的值到任意位的方法示例
May 08 Python
python实现换位加密算法的示例
Oct 14 Python
Python 给某个文件名添加时间戳的方法
Oct 16 Python
python实现自动获取IP并发送到邮箱
Dec 26 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
Jan 20 Python
一起来学习Python的元组和列表
Mar 13 Python
详解Python内置模块Collections
Mar 22 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
javascript,php获取函数参数对象的代码
2011/02/03 PHP
php数据结构与算法(PHP描述) 快速排序 quick sort
2012/06/21 PHP
PHP中time(),date(),mktime()区别介绍
2013/09/28 PHP
Three.js源码阅读笔记(Object3D类)
2012/12/27 Javascript
struts2+jquery+json实现异步加载数据(自写)
2013/06/24 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
jquery左边浮动到一定位置时显示返回顶部按钮
2014/06/05 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
ES6学习之变量的两种命名方法示例
2017/07/18 Javascript
JavaScript实现简单评论功能
2017/08/17 Javascript
JS实现带导航城市列表以及输入搜索功能
2018/01/04 Javascript
React学习笔记之高阶组件应用
2018/06/02 Javascript
Puppeteer 爬取动态生成的网页实战
2018/11/14 Javascript
轻松学习JavaScript函数中的 Rest 参数
2019/05/30 Javascript
微信小程序 高德地图路线规划实现过程详解
2019/08/05 Javascript
js实现搜索提示框效果
2020/09/05 Javascript
记一次vue跨域的解决
2020/10/21 Javascript
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
Python中正则表达式的详细教程
2015/04/30 Python
win系统下为Python3.5安装flask-mongoengine 库
2016/12/20 Python
Python 3实战爬虫之爬取京东图书的图片详解
2017/10/09 Python
Django获取应用下的所有models的例子
2019/08/30 Python
解决Django中checkbox复选框的传值问题
2020/03/31 Python
TensorFlow的环境配置与安装教程详解(win10+GeForce GTX1060+CUDA 9.0+cuDNN7.3+tensorflow-gpu 1.12.0+python3.5.5)
2020/06/22 Python
利用Python实现朋友圈中的九宫格图片效果
2020/09/03 Python
python如何设置静态变量
2020/09/07 Python
Django修改app名称和数据表迁移方案实现
2020/09/17 Python
pycharm 实现调试窗口恢复
2021/02/05 Python
试述DBMS的主要功能
2016/11/13 面试题
ktv收银员岗位职责
2013/12/16 职场文书
期终自我鉴定
2014/02/17 职场文书
对公司合理化的建议书
2014/03/12 职场文书
机关党员公开承诺书
2014/08/30 职场文书
2014年十一国庆节活动方案
2014/09/16 职场文书
总账会计岗位职责
2015/04/02 职场文书
讲解MySQL增删改操作
2022/05/06 MySQL