文章来源于网络收集而来,版权归原创者所有,如有侵权请及时联系!
5.2 多媒体文件抽取
存储媒体文件主要有两种方式:只获取文件的URL链接,或者直接将媒体文件下载到本地。如果你采取的是第一种方式,只需看5.1节。本节主要讲解第二种方式,即将媒体文件下载下来。
本节主要介绍urllib模块提供的urlretrieve()函数。urlretrieve()方法直接将远程数据下载到本地,函数原型如下:
urlretrieve(url, filename=None, reporthook=None, data=None)
参数说明:
·参数filename指定了存储的本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。)
·参数reporthook是一个回调函数。当连接上服务器以及相应的数据块传输完毕时会触发该回调函数,我们可以利用这个回调函数来显示当前的下载进度。
·参数data指post到服务器的数据,该方法返回一个包含两个元素的(filename,headers)元组,filename表示保存到本地的路径,header表示服务器的响应头。
以天堂图片网为例(http://www.ivsky.com/tupian/ziranfengguang/ ),提取当前网址中的图片链接,并将图片下载到当前目录下。代码如下:
import urllib from lxml import etree import requests def Schedule(blocknum,blocksize,totalsize): ''''' blocknum:已经下载的数据块 blocksize:数据块的大小 totalsize:远程文件的大小 ''' per = 100.0 * blocknum * blocksize / totalsize if per > 100 : per = 100 print '当前下载进度:%d'%per user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers={'User-Agent':user_agent} r = requests.get('http://www.ivsky.com/tupian/ziranfengguang/',headers=headers) # 使用lxml解析网页 html = etree.HTML(r.text) img_urls = html.xpath('.// img/@src')# 先找到所有的img i=0 for img_url in img_urls: urllib.urlretrieve(img_url,'img'+str(i)+'.jpg',Schedule) i+=1
本程序中先从当前网址将img标记中的src属性提取出来,交给urllib.urlretrieve函数去下载,自动回调Schedule函数,显示当前下载的进度。Schedule函数主要包括3个参数:blocknum(已经下载的数据块)、blocksize(数据块的大小)和totalsize(远程文件的大小)。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论