当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python urllib.request.urlretrieve用法及代码示例


用法:

urllib.request.urlretrieve(url, filename=None, reporthook=None, data=None)

将由 URL 表示的网络对象复制到本地文件。如果 URL 指向本地文件,除非提供文件名,否则不会复制对象。返回一个元组(filename, headers),其中filename 是可以在其中找到对象的本地文件名,而headersurlopen() 返回的对象的info() 方法(对于远程对象)。例外情况与 urlopen() 相同。

第二个参数(如果存在)指定要复制到的文件位置(如果不存在,则该位置将是具有生成名称的临时文件)。第三个参数(如果存在)是可调用的,将在建立网络连接时调用一次,然后在每个块读取之后调用一次。可调用对象将传递三个参数;到目前为止传输的块数,以字节为单位的块大小以及文件的总大小。第三个参数可能是旧 FTP 服务器上的 -1,它不会返回文件大小以响应检索请求。

以下示例说明了最常见的使用场景:

>>> import urllib.request
>>> local_filename, headers = urllib.request.urlretrieve('http://python.org/')
>>> html = open(local_filename)
>>> html.close()

如果 url 使用 http: 方案标识符,则可以给出可选的 data 参数来指定 POST 请求(通常请求类型是 GET )。 data 参数必须是标准 application/x-www-form-urlencoded 格式的字节对象;请参阅urllib.parse.urlencode() 函数。

urlretrieve() 检测到可用数据量小于预期量(即Content-Length 标头报告的大小)时,将引发ContentTooShortError。例如,当下载中断时,可能会发生这种情况。

Content-Length 被视为下限:如果要读取的数据更多,则 urlretrieve 会读取更多数据,但如果可用数据更少,则会引发异常。

在这种情况下,您仍然可以检索下载的数据,它存储在异常实例的content 属性中。

如果没有提供 Content-Length 标头,则 urlretrieve 无法检查它已下载的数据的大小,而只是将其返回。在这种情况下,您只需假设下载成功。

相关用法


注:本文由纯净天空筛选整理自python.org大神的英文原创作品 urllib.request.urlretrieve。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。