HTMLParser是python用来解析html的模块。它可以分析出html里面的标签、数据等等,是一种处理html的简便途径。 HTMLParser采用的是一种事件驱动的模式,当HTMLParser找到一个特定的标记时,它会去调用一个用户定义的函数,以此来通知程序处理。它 主要的用户回调函数的命名都是以handler_开头的,都是HTMLParser的成员函数。当我们使用时,就从HTMLParser派生出新的类,然 后重新定义这几个以handler_开头的函数即可。
#coding=utf-8
from HTMLParser import HTMLParser
class MyParser(HTMLParser):
"""一个简单的HTMLparser的例子"""
def handle_decl(self, decl):
"""处理头文档"""
HTMLParser.handle_decl(self, decl)
print decl
def handle_starttag(self, tag, attrs):
"""处理起始标签"""
HTMLParser.handle_starttag(self, tag, attrs)
if not HTMLParser.get_starttag_text(self).endswith("/>"):
print "<",tag,">"
def handle_data(self, data):
"""处理文本元素"""
HTMLParser.handle_data(self, data)
print data,
def handle_endtag(self, tag):
"""处理结束标签"""
HTMLParser.handle_endtag(self, tag)
if not HTMLParser.get_starttag_text(self).endswith("/>"):
print "</",tag,">"
def handle_startendtag(self, tag, attrs):
"""处理自闭标签"""
HTMLParser.handle_startendtag(self, tag, attrs)
print HTMLParser.get_starttag_text(self)
def handle_comment(self, data):
"""处理注释"""
HTMLParser.handle_comment(self, data)
print data
def close(self):
HTMLParser.close(self)
print "parser over"
demo=MyParser()
demo.feed(open("d:\\hello.html").read())
demo.close()
我的代码:
class MyHTMLParser(HTMLParser):
''' parser class '''
def __init__(self):
HTMLParser.__init__(self)
def handle_starttag(self,tag,attrs):
''' The wrong row has the wrong bgcolor'''
if tag == 'tr' :
if len(attrs):
if attrs[0][1] != '#22DD22':
print 0
def getError():
''' parser the html text '''
parserObj = MyHTMLParser()
parserObj.feed(getHTML())
parserObj.close()
class MyHTMLParser(HTMLParser):
''' parser class '''
def __init__(self):
HTMLParser.__init__(self)
self.tr = False
self.td = 0
self.ToPrint = False
def handle_starttag(self,tag,attrs):
''' find the tr and find the td '''
HTMLParser.handle_starttag(self, tag, attrs)
if tag == 'tr' :
if len(attrs):
self.tr = True
if tag == 'td' and self.tr == True:
if self.td == 0:
self.td = self.td + 1
else:
self.ToPrint = True
self.tr = False
self.td = 0
def handle_data(self,data):
''' print the td's text '''
HTMLParser.handle_data(self, data)
if self.ToPrint:
self.ToPrint = False
if data.strip() != 'true':
print 0
sys.exit()