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