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 相关文章推荐
pyv8学习python和javascript变量进行交互
Dec 04 Python
Python之eval()函数危险性浅析
Jul 03 Python
python将文本转换成图片输出的方法
Apr 28 Python
Python多进程同步简单实现代码
Apr 27 Python
基于循环神经网络(RNN)实现影评情感分类
Mar 26 Python
python 判断网络连通的实现方法
Apr 22 Python
python环形单链表的约瑟夫问题详解
Sep 27 Python
Django使用redis缓存服务器的实现代码示例
Apr 28 Python
使用Python计算玩彩票赢钱概率
Jun 26 Python
python 遍历pd.Series的index和value
Nov 26 Python
Pycharm 2020年最新激活码(亲测有效)
Sep 18 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
Jun 23 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中神奇的fastcgi_finish_request
2011/05/02 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
2014/05/06 PHP
php基于socket实现SMTP发送邮件的方法
2015/03/05 PHP
php微信公众号开发之翻页查询
2018/10/20 PHP
阿里对象存储OSS在laravel框架中的使用方法
2019/10/13 PHP
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
JavaScript小技巧整理篇(非常全)
2016/01/26 Javascript
Node.js批量给图片加水印的方法
2016/11/15 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
2017/02/10 Javascript
jQuery实现导航回弹效果
2017/02/27 Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
2017/03/02 Javascript
JavaScript之Map和Set_动力节点Java学院整理
2017/06/29 Javascript
关于Vue单页面骨架屏实践记录
2017/12/13 Javascript
Ionic学习日记实现验证码倒计时
2018/02/08 Javascript
nuxt.js 缓存实践
2018/06/25 Javascript
jQuery实现的点击按钮改变样式功能示例
2018/07/21 jQuery
JavaScript创建对象方法实例小结
2018/09/03 Javascript
JS中比较两个Object数组是否相等方法实例
2019/11/11 Javascript
js实现简单进度条效果
2020/03/25 Javascript
python 解析html之BeautifulSoup
2009/07/07 Python
深入理解python多进程编程
2016/06/12 Python
python利用requests库进行接口测试的方法详解
2018/07/06 Python
使用Scrapy爬取动态数据
2018/10/21 Python
django 实现简单的插入视频
2020/04/07 Python
对Python 字典元素进行删除的方法
2020/07/31 Python
Django如何批量创建Model
2020/09/01 Python
Python实现Kerberos用户的增删改查操作
2020/12/14 Python
html5时钟实现代码
2010/10/22 HTML / CSS
Java平台和其他软件平台有什么不同
2015/06/05 面试题
乡镇干部先进事迹材料
2014/02/03 职场文书
党员干部2014全国两会学习心得体会
2014/03/10 职场文书
门店业绩提升方案
2014/06/08 职场文书
支部书记四风问题对照检查材料
2014/10/04 职场文书
低门槛开发iOS、Android、小程序应用的前端框架详解
2021/10/16 Javascript