HTMLParser类的定义及常用方法
类的定义
- HTMLParser主要是用来解析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中注释的处理方法。
解释部分:
- tag表示的是html标签,attrs是一个列表,列表元素为一个个“(属性,值)”形式的元组。
- HTMLParser会自动将tag和attrs都转为小写。
实例应用
try: from HTMLParser import HTMLParser except: from html.parser import HTMLParser class MyHTMLParser(HTMLParser): def __init__(self): HTMLParser.__init__(self) self.data = [] # 定义data数组用来存储html中的数据 self.links = [] def handle_starttag(self, tag, attrs): print('<%s>' % tag) if tag == "a": if len(attrs) == 0: pass else: for (variable, value) in attrs: if variable == "href": self.links.append(value) def handle_endtag(self, tag): print('</%s>' % tag) def handle_startendtag(self, tag, attrs): print('<%s/>' % tag) def handle_data(self, data): print('data===>', data) def handle_comment(self, data): print('<!--', data, '-->') def handle_entityref(self, name): print('&%s;' % name) def handle_charref(self, name): print('&#%s;' % name) if __name__ == "__main__": html_code = '''<html> <head>这是头标签</head> <body> <!-- test html parser --> <p>Some <a href=\"#\">html</a> HTML Ӓ Ӓtutorial...<br>END</p> </body></html>''' parser = MyHTMLParser() parser.feed(html_code) parser.close() print(parser.data) print(parser.links)
处理HTML转义字符
在 HTML 中 <、>、& 等字符有特殊含义(<,> 用于标签中,& 用于转义),他们不能在 HTML 代码中直接使用,如果要在网页中显示这些符号,就需要使用 HTML 的转义字符串(Escape Sequence),例如 < 的转义字符是 <,浏览器渲染 HTML 页面时,会自动把转移字符串换成真实字符。
转义字符(Escape Sequence)由三部分组成:第一部分是一个 & 符号,第二部分是实体(Entity)名字,第三部分是一个分号。 比如,要显示小于号(<),就可以写 <。
html = '<abc>' # 反转义:方式1 try: from HTMLParser import HTMLParser except: from html.parser import HTMLParser html_parser = HTMLParser() text = html_parser.unescape(html) print(text) # 反转义:方式2 import html text = html.unescape('a=1&b=2') print(text) # 转义 import cgi html = cgi.escape(text) print(html)
https://www.liaoxuefeng.com/wiki/897692888725344/966401234683424
https://www.liaoxuefeng.com/wiki/1016959663602400/1017784593019776
https://baijiahao.baidu.com/s?id=1637614366297669334&wfr=spider&for=pc