如何在Python中使用html5lib获取body元素的内容?

1 投票
1 回答
2378 浏览
提问于 2025-04-16 18:31

我怎样才能用Python中的html5lib来获取<body>元素的内容呢?

举个例子,输入的数据是:<html><head></head><body>xxx<b>yyy</b></hr></body></html>

我希望得到的输出是:xxx<b>yyy</b></hr>

即使HTML有问题(比如标签没有关闭等),这个方法也应该能正常工作。

1 个回答

5

html5lib 让你可以用多种标准的树形格式来解析你的文档。你可以使用 lxml,就像我下面做的那样,或者你也可以按照他们的 用户文档 的说明,使用 minidomElementTree 或者 BeautifulSoup 来实现。

file = open("mydocument.html")
doc = html5lib.parse(file, treebuilder="lxml")
content = doc.findtext("html/body", default=None):

对评论的回应

其实你可以不安装任何外部库,使用他们自己的 simpletree.py 来实现这个功能,不过根据文件开头的评论来看,我觉得这不是推荐的做法……

# Really crappy basic implementation of a DOM-core like thing

不过如果你还是想这样做,你可以像下面这样解析 HTML 文档:

f = open("mydocument.html")
doc = html5lib.parse(f) 

然后通过对文档中的子节点进行广度优先搜索,找到你想要的元素。这些节点保存在一个叫 childNodes 的数组里,每个节点都有一个名字,存储在 name 字段中。

撰写回答