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 30 Python
python socket多线程通讯实例分析(聊天室)
Apr 06 Python
简单了解python模块概念
Jan 11 Python
用tensorflow搭建CNN的方法
Mar 05 Python
Python面向对象之类和对象属性的增删改查操作示例
Dec 14 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
Apr 09 Python
python threading和multiprocessing模块基本用法实例分析
Jul 25 Python
Python实现直方图均衡基本原理解析
Aug 08 Python
详解Python中的format格式化函数的使用方法
Nov 20 Python
布隆过滤器的概述及Python实现方法
Dec 08 Python
Python实现图片识别加翻译功能
Dec 26 Python
Django-Scrapy生成后端json接口的方法示例
Oct 06 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实现mysql事务处理的方法
2014/12/25 PHP
一步一步教你写一个jQuery的插件教程(Plugin)
2009/09/03 Javascript
jquery 简单的进度条实现代码
2010/03/11 Javascript
c#和Javascript操作同一json对象的实现代码
2012/01/17 Javascript
javascript中数组的concat()方法使用介绍
2013/12/18 Javascript
javascript使用正则获取url上的某个参数
2014/09/04 Javascript
js命名空间写法示例
2015/12/18 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
angular.js 路由及页面传参示例
2017/02/24 Javascript
深究AngularJS之ui-router详解
2017/06/13 Javascript
JS SetInterval 代码实现页面轮询
2017/08/11 Javascript
bootstrap轮播模板使用方法详解
2017/11/17 Javascript
初识 Vue.js 中的 *.Vue文件
2017/11/22 Javascript
微信小程序排坑指南详解
2018/05/23 Javascript
Node.js使用MongoDB的ObjectId作为查询条件的方法
2019/09/10 Javascript
layui将table转化表单显示的方法(即table.render转为表单展示)
2019/09/24 Javascript
Vue实现背景更换颜色操作
2020/07/17 Javascript
Vue路由 重定向和别名的区别说明
2020/09/09 Javascript
Vue+scss白天和夜间模式切换功能的实现方法
2021/01/05 Vue.js
Python map和reduce函数用法示例
2015/02/26 Python
Python类方法__init__和__del__构造、析构过程分析
2015/03/06 Python
Python实现自动发送邮件功能
2021/03/02 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
使用python telnetlib批量备份交换机配置的方法
2019/07/25 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
2019/10/24 Python
python模拟实现分发扑克牌
2020/04/22 Python
基于CSS3实现立方体自转效果
2016/03/01 HTML / CSS
罗德与泰勒百货官网:Lord & Taylor
2016/08/12 全球购物
Kidsroom台湾:来自德国的婴儿用品
2017/12/11 全球购物
华三通信H3C面试题
2015/05/15 面试题
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
法律专业应届生自荐信范文
2014/01/06 职场文书
安全生产目标责任书
2014/04/14 职场文书
关于安全演讲稿
2014/05/09 职场文书
离婚撤诉申请书范本
2015/05/18 职场文书
入党介绍人考察意见
2015/06/01 职场文书