最近在学习爬虫,在爬取网站时很多时候是需要将图片或视频下载到本地 今天就来说说如何使用urllib将图片保存到本地
以下代码均为win7 python3.6.*
方法一(使用下载函数保存)
from urllib import request # 要下载的图片链接地址 img_url = 'https://imgsa.baidu.com/forum/w%3D580/sign=adc0a68a97504fc2a25fb00dd5dfe7f0/873df8dcd100baa14fff6d394b10b912c9fc2e64.jpg' #url为图片下载链接 request.urlretrieve(url=img_url,'./baidu/1.jpg')
方法二(使用文件方式保存)
from urllib import request#要下载的链接地址 img_url = 'https://imgsa.baidu.com/forum/w%3D580/sign=adc0a68a97504fc2a25fb00dd5dfe7f0/873df8dcd100baa14fff6d394b10b912c9fc2e64.jpg' # 文件的方式保存下载的图片 response = request.urlopen(img_url) #读取返回的内容 img = response.read() with open('baidu/1.jpg','wb') as f:#将图片内容以二进制写入f.write(img)
方法三(使用下载函数下载视频并输出下载进度)
from urllib import requestbase_url = 'https://f.us.sinaimg.cn/001KhC86lx07laEy0PtC01040200y8vC0k010.mp4?label=mp4_hd&template=640x360.28&Expires=1528689591&ssig=qhWun5Mago&KID=unistore,video' #下载进度函数 def report(a,b,c):'''a:已经下载的数据块b:数据块的大小c:远程文件的大小'''per = 100.0 * a * b / cif per > 100:per = 100print ('%.2f%%' % per) #使用下载函数下载视频并调用进度函数输出下载进度 request.urlretrieve(url=base_url,finename='weibo/1.mp4',reporthook=report,data=None)
说明:
-
参数 finename 指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。)
-
参数 reporthook 是一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。
-
参数 data 指 post 到服务器的数据,该方法返回一个包含两个元素的(filename, headers)元组,filename 表示保存到本地的路径,header 表示服务器的响应头。
-