Python2之HTMLParse

1 导入库

from html.parser import HTMLParser

2 运用

该模块是一个解析html文件的模块

2.1 HTMLParse有如下方法

*  HTMLParser.feed数据

         将一些文本提供给解析器。只要它由完整的元素组成,它就被处理; 不完整的数据被缓冲,直到输入或close()调用更多数据 。 数据可以是unicode或 str,但unicode建议通过。

HTMLParser.close()

         强制处理所有缓冲数据,就好像它后跟一个文件结束标记一样。此方法可以由派生类重新定义,以在输入的末尾定义附加处理,但重新定义的版本应始终调用HTMLParser基类方法close()

HTMLParser.reset()

         重置实例。丢失所有未处理的数据。这在实例化时隐式调用。

HTMLParser.handle_starttagself,tag,attrs 

HTMLParser.handle_endtagself,tag,attrs 

          解析时碰到<***>,自动调用handle_starttag();碰到</***>,自动调用handle_endtag(),并对tag赋值为标签标记

HTMLParser.handle_dataself,data

         这种方法被调用来处理任意数据

HTMLParser.handle_comment数据

        遇到注释时调用此方法(例如<!--comment-->

HTMLParser.handle_decldecl 

        调用此方法来处理HTML doctype声明

HTMLParser.handle_charref名字

        这种方法被调用来处理和十进制形式的十六进制数字字符引用&#NNN;&#xNNN;。例如,&gt;is 的十进制等值&#62;,而十六进制是&#x3E;; 在这种情况下,该方法将接收'62''x3E'

2.2 示例如下

from HTMLParser import HTMLParser
from htmlentitydefs import name2codepoint

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print "Start tag:", tag
        for attr in attrs:
            print "     attr:", attr

    def handle_endtag(self, tag):
        print "End tag  :", tag

    def handle_data(self, data):
        print "Data     :", data

    def handle_comment(self, data):
        print "Comment  :", data

    def handle_entityref(self, name):
        c = unichr(name2codepoint[name])
        print "Named ent:", c

    def handle_charref(self, name):
        if name.startswith('x'):
            c = unichr(int(name[1:], 16))
        else:
            c = unichr(int(name))
        print "Num ent  :", c

    def handle_decl(self, data):
        print "Decl     :", data

parser = MyHTMLParser()

------------------------------------------------------------------------------------
>>> parser.feed('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" '
...             '"http://www.w3.org/TR/html4/strict.dtd">')
Decl     : DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"


------------------------------------------------------------------------------------
>>> parser.feed('<img src="python-logo.png" alt="The Python logo">')
Start tag: img
     attr: ('src', 'python-logo.png')
     attr: ('alt', 'The Python logo')
>>>
>>> parser.feed('<h1>Python</h1>')
Start tag: h1
Data     : Python
End tag  : h1

-------------------------------------------------------------------------------------
>>> parser.feed('<style type="text/css">#python { color: green }</style>')
Start tag: style
     attr: ('type', 'text/css')
Data     : #python { color: green }
End tag  : style

>>> parser.feed('<script type="text/javascript">'
...             'alert("<strong>hello!</strong>");</script>')
Start tag: script
     attr: ('type', 'text/javascript')
Data     : alert("<strong>hello!</strong>");
End tag  : script

--------------------------------------------------------------------------------------
>>> parser.feed('<!-- a comment -->'
...             '<!--[if IE 9]>IE-specific content<![endif]-->')
Comment  :  a comment
Comment  : [if IE 9]>IE-specific content<![endif]

--------------------------------------------------------------------------------------
>>> for chunk in ['<sp', 'an>buff', 'ered ', 'text</s', 'pan>']:
...     parser.feed(chunk)
...
Start tag: span
Data     : buff
Data     : ered
Data     : text
End tag  : span

         

猜你喜欢

转载自blog.csdn.net/qq_41982304/article/details/82973345