【发布时间】:2017-10-07 14:36:10
【问题描述】:
我尝试将 HTML 页面转换为树结构。我已经派生了这个类(我删除了我对每个标签所做的实际操作,因为它不相关):
class PageParser(html.parser.HTMLParser):
def handle_starttag(self, tag, attrs):
print("start "+tag)
def handle_endtag(self, tag):
print("end "+tag)
def handle_startendtag(self, tag, attrs):
print("startend "+tag)
我预计空元素会触发handle_startendtag 方法。问题是,当遇到像<meta> 这样的空元素时,只会调用handle_starttag 方法。从我的班级的角度来看,标签永远不会关闭:
parser = PageParser()
parser.feed('<div> <meta charset="utf-8"> </div>')
打印:
start div
start meta
end div
我需要知道每个元素何时关闭才能正确创建树。如何知道标签是否为空元素?
【问题讨论】:
-
来自文档:“此解析器不会检查结束标记是否与开始标记匹配,也不会为通过关闭外部元素隐式关闭的元素调用结束标记处理程序。” docs.python.org/3/library/html.parser.html
-
您应该输入严格的 XML,其中
<meta>标签不再有效,您必须将其写为<meta/>,或者跟踪可能作为空标签出现的标签列表,比如<br/>或<meta/>标签。
标签: python html python-3.x parsing html-parsing