使用urllib.request.urlretrieve()函数设计一个下载器

参考 Python document

目录

1. 代码格式

2. 函数功能描述

3. 参数说明

4. 案例说明——使用该函数设计一个下载器


1. 代码格式

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

2. 函数功能描述

将URL表示的网络对象复制到本地文件。如果URL指向本地文件,则对象将不会被复制,除非提供文件名。

返回一个元组(filename,header),其中filename是可以找到对象的本地文件名,header是urlopen()返回的对象的info()方法(用于远程对象)。

第二个参数(如果存在)指定要复制到的文件位置(如果没有,该位置将是一个生成名称的tempfile)。

第三个参数,如果存在,则是一个回调函数,它将在建立网络连接时调用一次,并且在此后每个块读取后调用一次。这个回调函数将传递三个参数;到目前为止传输的块计数,以字节为单位的块大小,以及文件的总大小。第三个参数可能是-1,在旧的FTP服务器上,它不返回文件大小以响应检索请求。

 

3. 参数说明

1. url:外部或者本地url;

2. filename:指定了保存到本地的路径(如果未指定该参数,urllib会生成一个临时文件来保存数据);

3. reporthook:是一个回调函数,当连接上服务器、以及相应的数据块传输完毕的时候会触发该回调。我们可以利用这个回调函数来显示当前的下载进度;

4. data:指post到服务器的数据。该方法返回一个包含两个元素的元组(filename, headers),filename表示保存到本地的路径,header表示服务器的响应头。

​​​​

4. 案例说明——使用该函数设计一个下载器

# coding: utf-8
import urllib.request
import os

url = 'https://nchc.dl.sourceforge.net/Setup.exe'  # 下载地址

filename = url[url.rindex('/') + 1:]  # 截取文件名
print('filename = ' + filename)

downloaded = '0'


def download_listener(a, b, c):
    per = 100.0 * a * b / c
    if per > 100:
        per = 100
    new_downloaded = '%.1f' % per
    global downloaded
    if new_downloaded != downloaded:
        downloaded = new_downloaded
        print('download %s%%  %s/%s' % (downloaded, a * b, c))


path = 'D:\\download\\'  # 下载目录
if not os.path.exists(path):
    os.mkdir(path)

response = urllib.request.urlretrieve(url, path + filename, download_listener)

重新学习一遍爬虫,领悟一些新的话里呼哨的玩意儿。 

 

你可能感兴趣的:(网络爬虫,Python,python,爬虫)