使用Python同时下载一个文件的几个部分?

e-s*_*tis 7 python download

我知道如何使用urllib下载文件.但是,如果服务器允许,它会更快地同时下载同一文件的几个部分然后合并它们.

你是如何用Python做到的?如果你不能轻松地使用标准的lib,那么任何可以让你这样做的lib?

efo*_*nis 17

虽然我同意Gregory关于使用现有库的建议,但值得注意的是,您可以通过使用RangeHTTP标头来实现此目的.如果服务器接受字节范围请求,您可以启动多个线程并行下载文件的多个部分.例如,此代码段仅下载指定文件的字节0..65535:

import urllib2
url = 'http://example.com/test.zip'
req = urllib2.Request(url, headers={'Range':'bytes=0-65535'})
data = urllib2.urlopen(req).read()
Run Code Online (Sandbox Code Playgroud)

您可以通过发送HEAD请求来确定远程资源大小并查看服务器是否支持范围请求:

import urllib2

class HeadRequest(urllib2.Request):
    def get_method(self):
        return "HEAD"

url = 'http://sstatic.net/stackoverflow/img/sprites.png'
req = HeadRequest(url)
response = urllib2.urlopen(req)
response.close()
print respose.headers
Run Code Online (Sandbox Code Playgroud)

以上打印:

Cache-Control: max-age=604800
Content-Length: 16542
Content-Type: image/png
Last-Modified: Thu, 10 Mar 2011 06:13:43 GMT
Accept-Ranges: bytes
ETag: "c434b24eeadecb1:0"
Date: Mon, 14 Mar 2011 16:08:02 GMT
Connection: close
Run Code Online (Sandbox Code Playgroud)

从中我们可以看到文件大小为16542字节('Content-Length'),服务器支持字节范围('Accept-Ranges: bytes').


Gre*_*ory 6

PycURL可以做到.PycURL是libcurl的Python接口.它可用于从Python程序中获取由URL标识的对象,类似于urllib Python模块.PycURL成熟,速度非常快,并且支持许多功能.