Python实现HTTP协议下的文件下载方法总结


Posted in Python onApril 20, 2016

本文介绍了几种常用的python下载文件的方法,具体使用到了htttplib2,urllib等包,希望对大家有帮忙。

1.简单文件下载

使用htttplib2,具体代码如下:

h = httplib2.Http()      
url = 'https://3water.com/ip.zip'  
resp, content = h.request(url)  
      
if resp['status'] == '200':  
  with open(filename, 'wb') as f:  
    f.write(content)

使用urllib,具体代码如下:

filename = urllib.unquote(url).decode('utf8').split('/')[-1]  
urllib.urlretrieve(url, filename)

  

2.较大文件下载

def down_file():  
  url = "https://3water.com/download.abc"  
  
  file_name = url.split('/')[-1]  
  u = urllib2.urlopen(url)  
  f = open(file_name, 'wb')  
  meta = u.info()  
  file_size = int(meta.getheaders("Content-Length")[0])  
    
  file_size_dl = 0  
  block_sz = 8192  
  while True:  
    buffer = u.read(block_sz)  
    if not buffer:  
      break  
    
    file_size_dl += len(buffer)  
    f.write(buffer)  
  f.close()

在获取下载文件名的过程中,可以解析url,代码如下:

scheme, netloc, path, query, fragment = urlparse.urlsplit(url)  
filename = os.path.basename(path)  
if not filename:  
  filename = 'downloaded.file'

3.端点续传下载
在使用HTTP协议进行下载的时候只需要在头上设置一下Range的范围就可以进行断点续传下载,当然,首先服务器需要支持断点续传。

利用Python的urllib2模块完成断点续传下载的例子:

#!/usr/bin/python 
# -*- coding: UTF-8 -* 
''' 
Created on 2013-04-15 
Created by RobinTang 
A demo for Resuming Transfer 
''' 
import urllib2 
 
req = urllib2.Request('http://www.python.org/') 
req.add_header('Range', 'bytes=0-20') # set the range, from 0byte to 19byte, 20bytes len 
res = urllib2.urlopen(req) 
 
data = res.read() 
 
print data 
print '---------' 
print 'len:%d'%len(data)
Python 相关文章推荐
9种python web 程序的部署方式小结
Jun 30 Python
Python中的defaultdict与__missing__()使用介绍
Feb 03 Python
Django中Model的使用方法教程
Mar 07 Python
TensorFlow打印tensor值的实现方法
Jul 27 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
May 04 Python
python selenium爬取斗鱼所有直播房间信息过程详解
Aug 09 Python
Python Django 简单分页的实现代码解析
Aug 21 Python
Python网络编程之使用TCP方式传输文件操作示例
Nov 01 Python
Python内置加密模块用法解析
Nov 25 Python
Python Numpy,mask图像的生成详解
Feb 19 Python
windows上彻底删除jupyter notebook的实现
Apr 13 Python
Python 私有属性和私有方法应用场景分析
Jun 19 Python
详解Python命令行解析工具Argparse
Apr 20 #Python
利用Python如何生成随机密码
Apr 20 #Python
Python自动化部署工具Fabric的简单上手指南
Apr 19 #Python
python实现简单socket通信的方法
Apr 19 #Python
python实现域名系统(DNS)正向查询的方法
Apr 19 #Python
python安装与使用redis的方法
Apr 19 #Python
Python实现文件复制删除
Apr 19 #Python
You might like
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
JavaScript中的对象化编程
2008/01/16 Javascript
jquery jqPlot API 中文使用教程(非常强大的图表工具)
2011/08/15 Javascript
JavaScript中的匀速运动和变速(缓冲)运动详细介绍
2012/11/11 Javascript
javascript时间函数基础介绍
2013/03/28 Javascript
JavaScript常用的弹出广告及背投广告实现方法
2015/02/06 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
ECMAScript6轮播图实践知识总结
2016/08/17 Javascript
微信小程序图片选择、上传到服务器、预览(PHP)实现实例
2017/05/11 Javascript
JS实现下拉菜单列表与登录注册弹窗效果
2017/08/10 Javascript
react-native组件中NavigatorIOS和ListView结合使用的方法
2017/09/30 Javascript
JavaScript中arguments和this对象用法分析
2018/08/08 Javascript
在小程序开发中使用npm的方法
2018/10/17 Javascript
详解JavaScript中关于this指向的4种情况
2019/04/18 Javascript
使用原生JS实现火锅点餐小程序(面向对象思想)
2019/12/10 Javascript
详解如何在Javascript中使用Object.freeze()
2020/10/18 Javascript
Vue中强制组件重新渲染的正确方法
2021/01/03 Vue.js
[01:42]DOTA2 – 虚无之灵
2019/08/25 DOTA
Python的动态重新封装的教程
2015/04/11 Python
简化Python的Django框架代码的一些示例
2015/04/20 Python
总结python实现父类调用两种方法的不同
2017/01/15 Python
实例讲解python中的序列化知识点
2018/10/08 Python
python操作redis数据库的三种方法
2020/09/10 Python
摩顿布朗英国官方网上商店:奢华沐浴、身体和头发护理
2016/10/29 全球购物
Ellos瑞典官网:北欧地区时尚、美容和住宅领域领先的电子商务网站
2019/11/21 全球购物
阿玛尼美妆俄罗斯官网:Giorgio Armani Beauty RU
2020/07/19 全球购物
在DELPHI中调用存储过程和使用内嵌SQL哪种方式更好
2016/11/22 面试题
今冬明春火灾防控工作方案
2014/05/29 职场文书
个人工作作风整改措施思想汇报
2014/10/13 职场文书
小学秋季运动会通讯稿
2015/11/25 职场文书
教师正风肃纪心得体会
2016/01/15 职场文书
学生检讨书范文
2019/06/24 职场文书
三十年再续同学情倡议书
2019/11/27 职场文书
python中的装饰器该如何使用
2021/06/18 Python
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js