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 ORM框架SQLAlchemy学习笔记之数据查询实例
Jun 10 Python
Python过滤函数filter()使用自定义函数过滤序列实例
Aug 26 Python
Python编程之基于概率论的分类方法:朴素贝叶斯
Nov 11 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
Feb 18 Python
Python元组拆包和具名元组解析实例详解
Mar 26 Python
python 集合 并集、交集 Series list set 转换的实例
May 29 Python
Python设置在shell脚本中自动补全功能的方法
Jun 25 Python
python三大神器之fabric使用教程
Jun 10 Python
基于Python2、Python3中reload()的不同用法介绍
Aug 12 Python
python删除csv文件的行列
Apr 06 Python
python 实现图片特效处理
Apr 03 Python
python playwright之元素定位示例详解
Jul 23 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
FCKeditor添加自定义按钮
2008/03/27 PHP
php file_get_contents抓取Gzip网页乱码的三种解决方法
2013/11/12 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
2015/10/10 PHP
Smarty模板类内部原理实例分析
2019/07/03 PHP
Firefox和IE浏览器兼容JS脚本写法小结
2008/07/07 Javascript
基于jquery的让textarea自适应高度的插件
2010/08/03 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
jquery 按钮状态效果 正常、移上、按下
2013/08/12 Javascript
extjs每个组件要设置唯一的ID否则会出错
2014/06/15 Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
2016/12/15 Javascript
BootStrap Datetimepicker 汉化的实现代码
2017/02/10 Javascript
JS排序之冒泡排序详解
2017/04/08 Javascript
vue深入解析之render function code详解
2017/07/18 Javascript
微信小程序自定义tabBar组件开发详解
2020/09/24 Javascript
使用canvas实现一个vue弹幕组件功能
2018/11/30 Javascript
vue-cli配置全局sass、less变量的方法
2019/06/06 Javascript
微信小程序云开发获取文件夹下所有文件(推荐)
2019/11/14 Javascript
element-ui 实现响应式导航栏的示例代码
2020/05/08 Javascript
Python实现的排列组合计算操作示例
2017/10/13 Python
python做量化投资系列之比特币初始配置
2018/01/23 Python
python3安装pip3(install pip3 for python 3.x)
2018/04/03 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
2019/04/28 Python
python实现静态服务器
2019/09/05 Python
Python实现检测文件的MD5值来查找重复文件案例
2020/03/12 Python
python nohup 实现远程运行不宕机操作
2020/04/16 Python
全网最详细的PyCharm+Anaconda的安装过程图解
2021/01/25 Python
南京某公司笔试题
2013/01/27 面试题
个人简历中的自我评价范例
2013/10/29 职场文书
学校门卫岗位职责
2014/03/16 职场文书
乡镇爱国卫生月活动总结
2014/06/25 职场文书
小学亲子活动总结
2014/07/01 职场文书
我为党旗添光彩演讲稿
2014/09/13 职场文书
老人节标语大全
2014/10/08 职场文书
房产公证书样本
2015/01/23 职场文书
送达通知书
2015/04/25 职场文书
悬疑名作《朋友游戏》动画无字ED宣传片 新角色公开
2022/04/13 日漫