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编码时应该注意的几个情况
Mar 04 Python
python备份文件以及mysql数据库的脚本代码
Jun 10 Python
python获取本地计算机名字的方法
Apr 29 Python
Python实现SMTP发送邮件详细教程
Mar 02 Python
python 时间信息“2018-02-04 18:23:35“ 解析成字典形式的结果代码详解
Apr 19 Python
浅谈Pycharm中的Python Console与Terminal
Jan 17 Python
Python制作动态字符图的实例
Jan 27 Python
Django REST Framework之频率限制的使用
Sep 29 Python
Python爬虫之Selenium实现键盘事件
Dec 04 Python
python 实现IP子网计算
Feb 18 Python
Django实现简单的分页功能
Feb 22 Python
PyQt5 QThread倒计时功能的实现代码
Apr 02 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
PHP4实际应用经验篇(8)
2006/10/09 PHP
php正则取img标记中任意属性(正则替换去掉或改变图片img标记中的任意属性)
2013/08/13 PHP
PHP用反撇号执行外部命令
2015/04/14 PHP
试用php中oci8扩展
2015/06/18 PHP
浅析Yii2集成富文本编辑器redactor实例教程
2016/04/25 PHP
php依赖注入知识点详解
2019/09/23 PHP
PHP 对象接口简单实现方法示例
2020/04/13 PHP
JQuery的ajax基础上的超强GridView展示
2009/09/18 Javascript
JavaScript isArray()函数判断对象类型的种种方法
2010/10/11 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
js实现简单的联动菜单效果
2015/08/19 Javascript
浅谈JavaScript中的string拥有方法的原因
2015/08/28 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
原生JS中slice()方法和splice()区别
2017/03/06 Javascript
微信小程序Redux绑定实例详解
2017/06/07 Javascript
Vue实现virtual-dom的原理简析
2017/07/10 Javascript
Bootstrap 按钮样式与使用代码详解
2018/12/09 Javascript
layui动态绑定事件的方法
2019/09/20 Javascript
vue proxy 的优势与使用场景实现
2020/06/15 Javascript
js实现带积分弹球小游戏
2020/07/21 Javascript
js实现石头剪刀布游戏
2020/10/11 Javascript
React服务端渲染原理解析与实践
2021/03/04 Javascript
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
python 实现语音聊天机器人的示例代码
2018/12/02 Python
python类的实例化问题解决
2019/08/31 Python
关于windows下Tensorflow和pytorch安装教程
2020/02/04 Python
tensorboard显示空白的解决
2020/02/15 Python
在python image 中实现安装中文字体
2020/05/16 Python
Pandas中两个dataframe的交集和差集的示例代码
2020/12/13 Python
教师实习自我鉴定
2013/12/18 职场文书
大学生怎样写好自荐信
2014/02/25 职场文书
感恩的演讲稿
2014/05/06 职场文书
大学生个人简历自我评价
2015/03/11 职场文书
遗嘱格式范本
2015/08/07 职场文书
详解如何修改nginx的默认端口
2021/03/31 Servers