- HTMLParser是
html.parser模块下,主要是用来解析HTML文件(包括HTML中无效的标记)的模块。 - 参数convert_charrefs表示是否将所有的字符引用自动转化为Unicode形式,Python3.5以后默认是True。
- HTMLParser可以接收相应的HTML内容,并进行解析,遇到HTML的标签会自动调用相应的handler(处理方法)来处理,用户需要自己创建相应的子类来继承HTMLParser,并且复写相应的handler方法。
- HTMLParser不会检查开始标签和结束标签是否是一对
常见方法与属性 #
方法 #
HTMLParser.feed(data):接收一个字符串类型的HTML内容,并进行解析。HTMLParser.close():当遇到文件结束标签后进行的处理方法。如果子类要复写该方法,需要首先调用HTMLParser累的close()。HTMLParser.reset():重置HTMLParser实例,该方法会丢掉未处理的html内容。HTMLParser.getpos():返回当前行和相应的偏移量。HTMLParser.handle_starttag(tag, attrs):对开始标签的处理方法。例如<div id="main">,参数tag指的是div,attrs指的是一个由(name,Value)元组组成的列表。HTMLParser.handle_endtag(tag):对结束标签的处理方法。例如</div>,参数tag指的是div。HTMLParser.handle_startendtag(tag, attrs):识别没有结束标签的HTML标签,例如<img />等。HTMLParser.handle_data(data):对标签之间的数据的处理方法。<tag>test</tag>,data指的是“test”。HTMLParser.handle_comment(data):对HTML中注释的处理方法。
属性 #
HTMLParser.lasttag:上一个解析的标签名,是字符串
例子 #
from html.parser import HTMLParser
# 集成HTMLParser,重写方法
class MyHtmlParser(HTMLParser):
def handle_starttag(self,tag,attrs):
"开始标签"
print('%s标签开始' % tag)
print('%s标签属性:%s' % (tag,attrs))
def handle_endtag(self, tag):
"处理结束标签"
print('%s标签结束' % tag)
def handle_startendtag(self, tag, attrs):
"处理自闭和标签"
print('%s自闭和标签' % tag)
print('%s标签属性:%s' % (tag,attrs))
def handle_data(self, data):
"处理标签间数据"
print('%s标签间数据为:%s' % (self.lasttag,data))
def handle_comment(self, data):
"处理注释"
print('注释:%s' % data)
def handle_entityref(self, name):
print('&%s;' % name)
def handle_charref(self, name):
print('&#%s;' % name)
html = """
<html>
<-- 这是注释 -->
<head>这是头标签</head>
<body>
<!-- test html parser -->
<p>Some <a href=\"#\">html</a> HTML Ӓ Ӓtutorial...<br>END</p>
</body>
</html>
"""
#解析html字符串
p = MyHtmlParser()
p.feed(html)
#关闭解析
p.close()
转义字符 #
用 Python 来处理转义字符串有多种方式,而且 py2 和 py3 中处理方式不一样,在 python2 中,反转义串的模块是 HTMLParser。
# python2
import HTMLParser
a = HTMLParser().unescape('<abc>')
print(a)
'''
<abc>;
'''
Python3 HTMLParser 模块迁移到了 html.parser
# python3
from html.parser import HTMLParser
a = HTMLParser().unescape('<abc>')
print(a)
'''
<abc>;
'''
到 python3.4 以后的版本,在 html 模块新增了 unescape 方法
# python3.4
import html
a = html.unescape('<abc>')
print(a)
'''
<abc>;
'''