下载! urllib.request.urlretrieve用于下载链接URL的内容到本地filepath里面,里面的回调参数可查看进度

python3.x 版本将urllib与urllib2合并为urllib

urllib is a package that collects several modules for working with URLs:

urllib.request for opening and reading URLs

urllib.error containing the exceptions raised by urllib.request

urllib.parse for parsing URLs

urllib.robotparser for parsing robots.txt filesurllib.request

    def _progress(count, block_size, total_size):   ##  回调函数,count当前块的编号,block_size每次传输的块大小,total_size网页文件总大小
                prog = float(count * block_size) / float(total_size) * 100.0  #进度的百分占比
                sys.stdout.write('\r>> Downloading %s %.1f%%' %
                                 (filename, prog))
                sys.stdout.flush()

    filepath, _ = urllib.request.urlretrieve(url, filepath, reporthook=_progress)

函数:urllib.urlretrieve(url[, filename[, reporthook[, data]]]) 

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

参数说明: 
url:外部或者本地url 
filename:指定了保存到本地的路径(如果未指定该参数,urllib会生成一个临时文件来保存数据);                                             
reporthook:是一个回调函数,当连接上服务器、以及相应的数据块传输完毕的时候会触发该回调。我们可以利用这个回调函数来显示当前的下载进度。data:指post到服务器的数据。该方法返回一个包含两个元素的元组(filename, headers),filename表示保存到本地的路径,header表示服务器的响应头。

返回两个值,第一个值是文件的地址,第二个值是该文件的一些信息比如格式,类别,下载的日期等等

注意

这里的url所指的内容要和filepath的内容一致,

例如

import urllib.request

urllib.request.urlretrieve('https://www.baidu.com/3.jpg', '/home/zzp')这样子是会报错的

IsADirectoryError: [Errno 21] Is a directory: '/home/zzp/'就是说文件匹配成目录了

urllib.request.urlretrieve('https://www.baidu.com/3.jpg', '/home/zzp/333.jpg')这样就可以了,在zzp文件里面就能看到以333.jpg命名的文件了,若改为333.png,结果也可以下载,但是无法打开333.png文件。

aa,_ = urllib.request.urlretrieve('https://www.baidu.com/3.jpg', '/home/zzp/333.jpg')返回值aa是 ’/home/zzp/333.jpg‘ ,是字符串类型

猜你喜欢

转载自blog.csdn.net/zz2230633069/article/details/81287372