Python实现HTTP协议下的文件下载方法总结
作者:RobinTang 发布时间:2023-04-29 20:01:36
标签:Python,下载
本文介绍了几种常用的python下载文件的方法,具体使用到了htttplib2,urllib等包,希望对大家有帮忙。
1.简单文件下载
使用htttplib2,具体代码如下:
h = httplib2.Http()
url = 'https://www.jb51.net/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://www.jb51.net/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)
0
投稿
猜你喜欢
- os.systemsystem方法会创建子进程运行外部程序,方法只返回外部程序的运行结果。这个方法比较适用于外部程序没有输出结果的情况。im
- Firefox 3 有一个很让人讨厌的bug:基于某种目的,在表单提交时 disable 掉提交按钮,通过后退键回到这个页面后,这个提交按钮
- 本文实例讲述了python类继承与子类实例初始化用法。分享给大家供大家参考。具体分析如下:[ 先贴参考书籍原文(中文英文对照)]__init
- 一、概念梳理链表是计算机科学里面应用应用最广泛的数据结构之一。它是最简单的数据结构之一,同时也是比较高阶的数据结构(例如棧、环形缓冲和队列)
- Internet Explorer 8 Beta 测试了一年多之后,今天,IE8 终于发布了。它绝对好过 IE7,还有一些不错的新功能,如
- 一、为什么提出python编程的核心是什么?我想要Python实现,这已经不是什么秘密了。WebAssembly它不仅会让Python进入浏
- 本文实例讲述了Python面向对象程序设计之私有属性及私有方法。分享给大家供大家参考,具体如下:如果有一个对象,当需要对其进行修改属性时,有
- python爬虫学习之定向爬取淘宝商品价格,供大家参考,具体内容如下import requestsimport redef getHTMLT
- 前言首先抛出几个问题:console.log(Boolean({}));console.log(Number([]));console.lo
- 我想把本篇作为css基础教程的序曲,从今天开始翻译和整理我从设计网页以来所学到的css基础知识。本教程会分成N个部分,单独发表,其间可能会插
- 本文实例讲述了symfony2.4的twig中date用法。分享给大家供大家参考,具体如下:获得当前时间:{{ "now"
- 有些使用Z-Blog的用户询问我,怎么实现我的月光博客首页上这种自动图文混排的版式效果,今天我就详细介绍一下在Z-Blog中实现这种图文混排
- 项目一开始的设计很重要,django中app的名称建议用小写我的博客由两个app组成,Blog和JiaBlog,总觉得不美观,想改成小写的o
- 随着python的发展越来越好,用python的伙伴也越来越多。本人刚开始接触python的时候用的第一个集成环境就是Anaconda,因为
- 本文实例讲述了PHP扩展Swoole实现实时异步任务队列。分享给大家供大家参考,具体如下:假如要发100封邮件,for循环100遍,用户直接
- 首先恭喜月影,当然希望好书大卖!原文提供了样章下载1.1M,pdf格式的。如果大家想下载可以访问源地址:http://bbs.51js.co
- 一、高斯滤波 高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。 [1] 通俗的讲,高斯滤波就是对整幅图像进
- 前言:要说小时候称霸所有翻盖手机的小游戏,除了贪吃蛇,那就是推箱子了。控制小人将所有箱子放到指定位置,就是这样简简单单的操作,陪伴我度过了无
- 在日常生活中我们经常在朋友圈看到有人发九宫格图片,其实质就是将一张图片切成九份,然后在微信中一起发这九张图。那么我们如何自己动手实现呢?说到
- system默认:managersys默认:change_on_install使用SQL Plus登录数据库时,system使用密码mana