#coding:utf-8 #存储文件的两种方式:1,只获取文件的URL链接(见5.1节); # 2,直接将媒体文件下载到本地(本节讲解); #本节主要介绍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_urls in img_urls: urllib.urlretrieve(img_urls,'img'+str(i)+'.jpg',Schedule) i += 1 ''' 本程序先从当前网址将img标记的src属性提取出来,交给urllib.urlretrieve函数 去下载,自动回调Schedule函数,显示当前下载的进度。Schedule函数 主要包括3个参数:blocknum(已经下载的数据块),blocksize(数据块的大小)和totalsize(远程文件的大小)。 '''
数据存储(无数据库版)之三:多媒体文件抽取
最新推荐文章于 2021-08-05 00:19:31 发布