python实现文件下载图片视频
最近在学习爬虫,在爬取网站时很多时候是需要将图片或视频下载到本地 今天就来说说如何使用urllib将图片保存到本地
以下代码均为win7 python3.6.*
使用urllib下载函数保存
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')
使用urllib文件方式写入文件
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)
使用urllib的下载函数下载视频并输出下载进度
from urllib import request base_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 / c if per > 100: per = 100 print ('%.2f%%' % per) #使用下载函数下载视频并调用进度函数输出下载进度 request.urlretrieve(url=base_url,finename='weibo/1.mp4',reporthook=report,data=None)
说明:
-
参数 finename 指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。)
-
参数 reporthook 是一个回调函数,当连接上服务器、以及相应的数据块传输完毕时会触发该回调,我们可以利用这个回调函数来显示当前的下载进度。
-
参数 data 指 post 到服务器的数据,该方法返回一个包含两个元素的(filename, headers)元组,filename 表示保存到本地的路径,header 表示服务器的响应头。
-
Python 下载超大文件
如有错误 欢迎交流