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 相关文章推荐
Python实现子类调用父类的方法
Nov 10 Python
Python转换HTML到Text纯文本的方法
Jan 15 Python
简单介绍Python中的几种数据类型
Jan 02 Python
老生常谈python之鸭子类和多态
Jun 13 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
Sep 12 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
Apr 18 Python
详解tensorflow载入数据的三种方式
Apr 24 Python
Python3.6日志Logging模块简单用法示例
Jun 14 Python
python按时间排序目录下的文件实现方法
Oct 17 Python
使用WingPro 7 设置Python路径的方法
Jul 24 Python
自适应线性神经网络Adaline的python实现详解
Sep 30 Python
Python中sorted()排序与字母大小写的问题
Jan 14 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 读取和修改大文件的某行内容的代码
2009/10/30 PHP
php网页标题中文乱码的有效解决方法
2014/03/05 PHP
php基于curl扩展制作跨平台的restfule 接口
2015/05/11 PHP
详解PHP中websocket的使用方法
2016/09/15 PHP
PHP 判断字符串是中文还是英文, 或者是中英混合
2021/03/09 PHP
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
2012/05/24 Javascript
javascript设计模式 封装和信息隐藏(上)
2012/07/24 Javascript
改变文件域的样式实现思路同时兼容ie、firefox
2013/10/23 Javascript
JavaScript实现维吉尼亚(Vigenere)密码算法实例
2013/11/22 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
JavaScript中String.prototype用法实例
2015/05/20 Javascript
使用Node.js配合Nginx实现高负载网络
2015/06/28 Javascript
JS拖拽插件实现步骤
2015/08/03 Javascript
js获取当前时间(昨天、今天、明天)
2016/11/23 Javascript
JS数组操作中的经典算法实例讲解
2017/07/26 Javascript
vue实现组件之间传值功能示例
2018/07/13 Javascript
jQuery插件实现的日历功能示例【附源码下载】
2018/09/07 jQuery
vue单页应用在页面刷新时保留状态数据的方法
2018/09/21 Javascript
jQuery删除/清空指定元素的所有子节点实例代码
2019/07/04 jQuery
Python基于回溯法子集树模板解决选排问题示例
2017/09/07 Python
python使用Tesseract库识别验证
2018/03/21 Python
Django框架视图函数设计示例
2019/07/29 Python
python 发送json数据操作实例分析
2019/10/15 Python
Keras 利用sklearn的ROC-AUC建立评价函数详解
2020/06/15 Python
基于CSS3特效之动画:animation的应用
2013/05/09 HTML / CSS
c/c++某大公司的两道笔试题
2014/02/02 面试题
市场开发与营销专业求职信
2013/12/31 职场文书
学雷锋志愿服务月活动总结
2014/03/09 职场文书
幼儿园大班区域活动总结
2014/07/09 职场文书
青年志愿者活动方案
2014/08/17 职场文书
2015欢度元旦标语口号
2014/12/09 职场文书
中国世界遗产导游词
2015/02/13 职场文书
2015年人事科工作总结
2015/04/28 职场文书
导游词之贵州百里杜鹃
2019/10/29 职场文书
Spring Boot配合PageHelper优化大表查询数据分页
2022/04/20 Java/Android
nginx日志格式分析和修改
2022/04/28 Servers