此模块中定义的HTMLParser类提供了解析HTML和XHMTL文档的功能。此类包含可以标识标签,数据,注释和其他HTML元素的处理程序方法。
我们必须定义一个继承HTMLParser类的新类,并使用feed()
方法提交HTML文本。
from html.parser import HTMLParser class parser(HTMLParser): pass p = parser()p.feed('<a href = "www.nhooo.com"></a>')
我们必须重写其以下方法
handle_starttag(tag, attrs):
HTML标记通常是成对的开始标记和结束标记。例如<head>和</ head>。调用此方法来处理标签的开始。
标签名称转换为小写。attrs参数代表在标签的<>括号内找到的属性。
例如,对于标签<a href = "www.nhooo.com"> </a>,将其馈送到解析器对象。
from html.parser import HTMLParser class parser(HTMLParser): def handle_starttag(self, tag, attrs): print("开始标签:", tag) for attr in attrs: print(" attr:", attr) p = parser()p.feed('<a href = "www.nhooo.com">')
输出结果
开始标签: a attr: ('href', 'www.nhooo.com') handle_endtag(tag):
调用此方法来处理元素的结束标记。
def handle_endtag(self, tag): print ("end tag",tag) handle_data(data):
调用此方法来处理标签之间的任意数据。例如:
def handle_data(self, data): print (data) p = parser()html = ''' <html> <body> <h1>Nhooo</h1> <b>Python standard library</b> <p>HTML module</p> </body> </html>''' p.feed(html)
输出结果
开始标签: h1 Nhooo end tag h1 开始标签: b Python standard library end tag b 开始标签: p HTML module end tag p
HTMLParser类中的其他方法如下:
返回最近打开的开始标签的文本。
返回当前行号和偏移量。
与handle_starttag()类似,但是在解析器遇到XHTML样式的空标记(<img ... />)时调用。
遇到评论时(例如<!-comment->),将调用此方法。