HTMLParser是处理HTML/XHTML文件最基本的工具
采用的是一种事件驱动的模式,在遇到标签、注释等时自动调用已经用户自定义的函数处理。
ps:不会检查标签是否闭合o(╯□╰)o
一些方法:
HTMLParser.feed(data) 将文本传入解析器,data为unicode或str
HTMLParser.close()
HTMLParser.reset()
其他的就是一些handle开头的处理函数
具体看代码吧
# coding=gbk
'''
Created on 2013-3-29
@author: YODA
'''
from HTMLParser import HTMLParser
class MyHTMLParser(HTMLParser):
#e.g. <!DOCTYPE html>
#decl = 'DOCTYPE html'
def handle_decl(self, decl):
print "处理头文档: ", decl
#e.g. <DIV Id="test" class="testC">
#tag = 'div'
#attrs = [('id','test'),('class','testC')]
def handle_starttag(self, tag, attrs):
print "遇到标签开始时处理:", tag
for attr in attrs:
print " attr:", attr
#e.g. </div>
#tag = 'div'
def handle_endtag(self, tag):
print "遇到标签结束时处理 :", tag
#e.g. <br/>
def handle_startendtag(self, tag, attrs):
print "处理自闭合的标记: ", tag
for attr in attrs:
print " attr:", attr
#data = text
def handle_data(self, data):
print "遇到普通文本时处理:", data
#data = comment
def handle_comment(self, data):
print "遇到注释时处理:", data
#e.g. >
#name = 'gt'
def handle_entityref(self,name):
print "处理实体字符", name
#e.g. > is >/>
#name = '62' or 'x3E'
def handle_charref(self,name):
print "处理十进制或十六进制的字符串", name
if __name__ == '__main__':
parser = MyHTMLParser()
parser.feed('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" '
'<html><head><title id="titleID">标题</title></head>'
'<body><h1>>Parse me!>>'
'<img src="python-logo.png" alt="The Python logo"、>'
'<!-- 注释文本 -->'
'</body></html>')
处理头文档: DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" <html
遇到标签开始时处理: head
遇到标签开始时处理: title
attr: ('id', 'titleID')
遇到普通文本时处理: 标题
遇到标签结束时处理 : title
遇到标签结束时处理 : head
遇到标签开始时处理: body
遇到标签开始时处理: h1
处理实体字符 gt
遇到普通文本时处理: Parse me!
处理十进制或十六进制的字符串 62
处理十进制或十六进制的字符串 x3E
处理自闭合的标记: img
attr: ('src', 'python-logo.png')
attr: ('alt', 'The Python logo')
遇到注释时处理: 注释文本
处理自闭合的标记: br
遇到标签结束时处理 : body
遇到标签结束时处理 : html