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多重继承新算法C3介绍
Sep 28 Python
深入理解python对json的操作总结
Jan 05 Python
Python 对象中的数据类型
May 13 Python
python爬虫获取多页天涯帖子
Feb 23 Python
Python扩展内置类型详解
Mar 26 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
Oct 11 Python
Python使用sklearn库实现的各种分类算法简单应用小结
Jul 04 Python
用Python实现最速下降法求极值的方法
Jul 10 Python
python 通过手机号识别出对应的微信性别(实例代码)
Dec 22 Python
python 计算概率密度、累计分布、逆函数的例子
Feb 25 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
Apr 10 Python
Python的in,is和id函数代码实例
Apr 18 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代码包装修正版
2008/03/15 PHP
PHP安装memcached扩展笔记
2015/05/28 PHP
用php实现分页效果的示例代码
2020/12/10 PHP
JS实现self的resend
2010/07/22 Javascript
jquery控制左右箭头滚动图片列表的实例
2013/05/20 Javascript
如何使用jQUery获取选中radio对应的值(一句代码)
2013/06/03 Javascript
jQuery层级选择器用法分析
2015/02/10 Javascript
jquery+css实现的红色线条横向二级菜单效果
2015/08/22 Javascript
Bootstrap每天必学之折叠(Collapse)插件
2016/04/25 Javascript
js编写一个简单的产品放大效果代码
2016/06/27 Javascript
jQuery实现在新增加的元素上添加事件方法案例分析
2017/02/09 Javascript
node.js入门学习之url模块
2017/02/25 Javascript
jquery 键盘事件的使用方法详解
2017/09/13 jQuery
详解小程序不同页面之间通讯的解决方案
2018/11/23 Javascript
vue v-for循环重复数据无法添加问题解决方法【加track-by='索引'】
2019/03/15 Javascript
vue props对象validator自定义函数实例
2019/11/13 Javascript
Vue 技巧之控制父类的 slot
2020/02/24 Javascript
jQuery HTML设置内容和属性操作实例分析
2020/05/20 jQuery
python使用socket向客户端发送数据的方法
2015/04/29 Python
Python 中的with关键字使用详解
2016/09/11 Python
Python闭包之返回函数的函数用法示例
2018/01/27 Python
Python实现中一次读取多个值的方法
2018/04/22 Python
python批量修改文件编码格式的方法
2018/05/31 Python
Python爬虫常用小技巧之设置代理IP
2018/09/13 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
2019/01/15 Python
Python3数字求和的实例
2019/02/19 Python
浅析python redis的连接及相关操作
2019/11/07 Python
Django web自定义通用权限控制实现方法
2020/11/24 Python
基于HTML5的WebGL实现json和echarts图表展现在同一个界面
2017/10/26 HTML / CSS
Omio中国:全欧洲低价大巴、火车和航班搜索和比价
2018/08/09 全球购物
蓝颜请假条
2014/04/11 职场文书
中考学习决心书
2015/02/04 职场文书
护士个人年度总结范文
2015/02/13 职场文书
这样写python注释让代码更加的优雅
2021/06/02 Python
HTML5页面音频自动播放的实现方式
2021/06/21 HTML / CSS
避坑之 JavaScript 中的toFixed()和正则表达式
2022/04/19 Javascript