网络爬虫--SAX处理xml

使用SAX处理xml 实际上有一个固定的框架,即标签开始,标签结束,文本处理。以下面例子讲解
出来book.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
    <book>
        <title lang="eng">Harry Potter</title>
        <price>29.99</price>
    </book>
    <book>
        <title lang="eng">Learning XML</title>
        <price>39.95</price>
    </book>
</bookstore>  

SAX代码如下:

from xml.parsers.expat import ParserCreate  #从xml分析器中导入自定义的分析器

class DefaultSaxHander(object):      #建一个默认的Sax处理器(当然类的名字可以自己定义)
    def start_element(self,name,attrs):    #标签处理开始,有标签名和属性
        self.name = name
        print('element: %s, attrs: %s' %(self.name,str(attrs)))

    def end_element(self,name):      #标签处理结束
        print('end element: %s' % name)

    def char_data(self,text):        #处理文本
        if text.strip():             #如果有text的前后有空格,\n,\t等,则去掉,如果内容仅仅为\t\n或空格则不打印
            print('%s\'s text is %s'%(self.name,text))

handler = DefaultSaxHander()     #生成Sax处理器
#初始化分析器
parser = ParserCreate()       
parser.StartElementHandler = handler.start_element
parser.EndElementHandler = handler.end_element
parser.CharacterDataHandler = handler.char_data
#打开文本,读取文件
with open(r'/media/sf_Share/LSPE/r_0.11/book.xml','r') as f:
    parser.Parse(f.read())   #整个文件一起读(大文件可以一行一行读取)

以上就是一个sax处理器的基本模样,有三部分,标签开始,标签结束,和文本处理,当一切都定义好之后就直接将值扔给ParserCreate,它自己内部知道怎么处理,所以像parser.StartElementHandler、parser.EndElementHandler,parser.CharacterDataHandler这些名字是默认的,不能写错,如Start写成star则会找不到模块。
结果如下:

element: bookstore, attrs: {}            #找到的第一个标签名为bookstore,属性为空,即没有属性
element: book, attrs: {}                 #第二个标签为book,属性为空
element: title, attrs: {'lang': 'eng'}  #第三个标签为title,属性名为lang,值为eng
title's text is Harry Potter            #文本内容
end element: title                       #title结束,进入下一个标签
element: price, attrs: {}                #标签为price,没有属性
price's text is 29.99                     #标签内容
end element: price
end element: book
element: book, attrs: {}
element: title, attrs: {'lang': 'eng'}
title's text is Learning XML
end element: title
element: price, attrs: {}
price's text is 39.95
end element: price
end element: book                            #结束book标签
end element: bookstore                       #结束bookstore标签

从上面看到,SAX解析出来的xml是有层级的,一层一层处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值