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_starttag
(self,tag,attrs )
* HTMLParser.
handle_endtag
(self,tag,attrs )
解析时碰到<***>,自动调用handle_starttag();碰到</***>,自动调用handle_endtag(),并对tag赋值为标签标记
* HTMLParser.handle_data
(self,data)
这种方法被调用来处理任意数据
* HTMLParser.handle_comment
(数据)
遇到注释时调用此方法(例如<!--comment-->
)
* HTMLParser.handle_decl
(decl )
调用此方法来处理HTML doctype声明
* HTMLParser.handle_charref
(名字)
这种方法被调用来处理和十进制形式的十六进制数字字符引用&#NNN;
和&#xNNN;
。例如,>
is 的十进制等值>
,而十六进制是>
; 在这种情况下,该方法将接收'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