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 迭代器与生成器实例详解
May 18 Python
详解python3中socket套接字的编码问题解决
Jul 01 Python
python opencv 直方图反向投影的方法
Feb 24 Python
Python中str.join()简单用法示例
Mar 20 Python
Python continue继续循环用法总结
Jun 10 Python
Python multiprocessing多进程原理与应用示例
Feb 28 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
Apr 14 Python
Python爬虫教程知识点总结
Oct 19 Python
Python list和str互转的实现示例
Nov 16 Python
解决python3输入的坑——input()
Dec 05 Python
利用Matlab绘制各类特殊图形的实例代码
Jul 16 Python
Python os和os.path模块详情
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
缓存技术详谈―php
2006/12/14 PHP
php的一个登录的类 [推荐]
2007/03/16 PHP
探讨方法的重写(覆载)详解
2013/06/08 PHP
php生成QRcode实例
2014/09/22 PHP
php递归遍历删除文件的方法
2015/04/17 PHP
Zend Framework框架实现类似Google搜索分页效果
2016/11/25 PHP
thinkPHP框架整合tcpdf插件操作示例
2018/08/07 PHP
在网页中屏蔽快捷键
2006/09/06 Javascript
asp.net和asp下ACCESS的参数化查询
2008/06/11 Javascript
web基于浏览器的本地存储方法应用
2012/11/27 Javascript
js 中的switch表达式使用示例
2020/06/03 Javascript
5秒后跳转到另一个页面的js代码
2013/10/12 Javascript
使用pjax实现无刷新更改页面url
2015/02/05 Javascript
基于jQuery实现的仿百度首页滑动选项卡效果代码
2015/11/16 Javascript
javascript日期验证之输入日期大于等于当前日期
2015/12/13 Javascript
JS对象创建的几种方式整理
2017/02/28 Javascript
Vue.js数据绑定之data属性
2017/07/07 Javascript
使用socket.io实现简单聊天室案例
2018/01/02 Javascript
解决vue项目报错webpackJsonp is not defined问题
2018/03/14 Javascript
vue安装和使用scss及sass与scss的区别详解
2018/10/15 Javascript
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
Vue+ElementUI 中级联选择器Bug问题的解决
2020/07/31 Javascript
[47:39]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs OPTIC
2018/03/31 DOTA
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
2016/09/21 Python
Python中的Numpy矩阵操作
2018/08/12 Python
如何在python字符串中输入纯粹的{}
2018/08/22 Python
Python turtle画图库&&画姓名实例
2020/01/19 Python
Pygame框架实现飞机大战
2020/08/07 Python
python如何绘制疫情图
2020/09/16 Python
python3中布局背景颜色代码分析
2020/12/01 Python
详解python3类型注释annotations实用案例
2021/01/20 Python
联想C++笔试题
2012/06/13 面试题
十月份红领巾广播稿
2014/01/22 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
保险公司2016开门红口号集锦
2015/12/24 职场文书
python读取并查看npz/npy文件数据以及数据显示方法
2022/04/14 Python