python解析HTML的方法——HTMLParser
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()
 
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号