解析html文档,采用html.parser 库
```
#1 导入库,
from html.parser import HTMLParser
from html.entities import name2codepoint
#2 创建具体处理文档的类,继承HTML
#里面的方法必须重写,方法名不可以随便变化,否则无法处理。
class MyHTMLParser(HTMLParser):
#处理开始标签,参数为标签和属性列表。
def handle_starttag(self,tag,attrs):
print('开始---',tag)
for attr in attrs:
print('属性',attr)
#处理结束标签,参数为 标签
def handle_endtag(self,tag):
print('结束...',tag)
#处理数据,数据是开始标签和结束标签的所有内容
#默认处理所有标签的数据。
#所以具体使用的使用,请在开始标签和结束标签处理方法中
#设计一些属性来检测是否位于我们所希望的标签内部
def handle_data(self,data):
print('数据+++',data)
#处理注释,参数是data,是猪似的内容.
def handle_comment(self,data):
print('This is zhu shi ',data)
#处理一些声明,doctype html.开头标记
def handle_decl(self, decl):
print('-'*50,decl,'-'*50)
#处理实体字符,name参数是文档中所有的实体字符,chr()方法,将实体字符转化为字符串一种是英文表示的 ,
def handle_entityref(self,name):
c=chr(name2codepoint[name])
print('entityref:',c)
#处理殊字符有两种,一种是数字表示的Ӓ,这两种字符都可以通过Parser解析出来
def handle_charref(self, name):
if name.startswith() == 'x':
c=chr(int(name[1:],16))
else:
c=chr(int(name))
print('Num ent :',c)
#创建解析对象
parser=MyHTMLParser()
with open('Text文本格式.html','r') as f:
for line in f.readlines():
#调用解析对象的read方法进行解释,参数是字符串feed()方法可以多次调用,也就是不一定一次把整个HTML字符串都塞进去,可以一部分一部分塞进去.
parser.feed(line)
```