lxml.etree.XMLSyntaxError: Opening and ending tag mismatch 问题解决方法:设置解析器
from lxml import etree
if __name__ == '__main__':
text = "<div><p>Hello Python</p><p>Hello Java</p><p>Hello World</p></div>"
# 从字符中进行解析
tree1 = etree.fromstring(text)
print(type(tree1))
# 从字符串中进行解析 XML 文档或者片段
tree2 = etree.XML(text)
print(type(tree2))
# 从字符串中进行解析 HTML 文档或者片段
tree3 = etree.HTML(text)
print(type(tree3))
# 相同点:都是从字符串常量中进行解析
# 不同点:fromstring 没有默认的解析器,XML 默认解析器是 XMLParser, HTML 默认解析器 HTMLParser
# fromstring 支持XMLParser、HTMLParser
# 根据HTML代码的规范性,标签都要求是一对出现的,这种单标签需要补一个斜线,
# 但是我们常用的IDE生成这一行代码的时候往往都不会自动补全一个斜线
# 如果不想修改html 文件的话,可以在parse 函数中指定解析器
# html = etree.parse(source="index.html", parser= etree.HTMLParser())
# 默认情况下,parser 是使用 XMLParser, XML 的规范要求元素是闭合的。
# lxml.etree.XMLSyntaxError: Opening and ending tag mismatch
# 这个问题的解决方式就是在解析 HTML 的时候,使用 HTMLParser 或者修改 html 文件(不推荐)。
html = etree.parse(source="index.html", parser= etree.XMLParser())
type(html)