html.parser
模块下,主要是用来解析HTML文件(包括HTML中无效的标记)的模块。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>;
'''