数据存储(无数据库版)之三:多媒体文件抽取

#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(远程文件的大小)。
'''
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值