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数据结构之二叉树的建立实例
Apr 29 Python
全面理解Python中self的用法
Jun 04 Python
python使用pandas实现数据分割实例代码
Jan 25 Python
tensorflow 加载部分变量的实例讲解
Jul 27 Python
在VS2017中用C#调用python脚本的实现
Jul 31 Python
python+selenium select下拉选择框定位处理方法
Aug 24 Python
python实现一个点绕另一个点旋转后的坐标
Dec 04 Python
在django中使用apscheduler 执行计划任务的实现方法
Feb 11 Python
Selenium之模拟登录铁路12306的示例代码
Jul 31 Python
python之语音识别speech模块
Sep 09 Python
python读取excel数据绘制简单曲线图的完整步骤记录
Oct 30 Python
浅析Python实现DFA算法
Jun 26 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实现分页显示
2015/11/03 PHP
PHP中常用的数组操作方法笔记整理
2016/05/16 PHP
PHP基于自增数据如何生成不重复的随机数示例
2017/05/19 PHP
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
两个数组去重的JS代码
2013/12/04 Javascript
jquery 淡入淡出效果的简单实现
2014/02/07 Javascript
js结合正则实现国内手机号段校验
2015/06/19 Javascript
JavaScript原型及原型链终极详解
2016/01/04 Javascript
AngularJS身份验证的方法
2016/02/17 Javascript
基于JQuery打造无缝滚动新闻步骤详解
2016/03/31 Javascript
Bootstrap CDN和本地化环境搭建
2016/10/26 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
浅谈mvvm-simple双向绑定简单实现
2018/04/18 Javascript
layuiAdmin循环遍历展示商品图片列表的方法
2019/09/16 Javascript
uni-app如何页面传参数的几种方法总结
2020/04/28 Javascript
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
2020/08/13 Javascript
python实现提取百度搜索结果的方法
2015/05/19 Python
详解Django中的权限和组以及消息
2015/07/23 Python
Python实现基于PIL和tesseract的验证码识别功能示例
2018/07/11 Python
Python利用递归实现文件的复制方法
2018/10/27 Python
Django中从mysql数据库中获取数据传到echarts方式
2020/04/07 Python
PyCharm2019 安装和配置教程详解附激活码
2020/07/31 Python
pycharm 实现调试窗口恢复
2021/02/05 Python
医院护理人员的自我评价分享
2013/10/04 职场文书
门卫岗位职责
2013/11/15 职场文书
教师应聘个人求职信
2013/12/10 职场文书
大众服装店创业计划书范文
2014/01/01 职场文书
小学生红领巾广播稿
2014/01/21 职场文书
长城的导游词
2015/01/30 职场文书
2015年信息宣传工作总结
2015/05/26 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书
java固定大小队列的几种实现方式详解
2021/07/15 Java/Android
Tomcat starup.bat 脚本实现开机自启动
2022/04/20 Servers