zoukankan      html  css  js  c++  java
  • 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()


     

  • 相关阅读:
    SSM简单实现文件上传和下载
    Web发送邮件
    scala写算法-快排
    scala写算法-从后缀表达式构造
    scalajs_初体验
    scala写算法-用小根堆解决topK
    scala-Future和Promise
    python基础之函数
    python基础知识(五)
    python基础知识(四)
  • 原文地址:https://www.cnblogs.com/chenjianhong/p/4144897.html
Copyright © 2011-2022 走看看