如何在Python中使用html5lib获取body元素的内容?
我怎样才能用Python中的html5lib
来获取<body>
元素的内容呢?
举个例子,输入的数据是:<html><head></head><body>xxx<b>yyy</b></hr></body></html>
我希望得到的输出是:xxx<b>yyy</b></hr>
即使HTML有问题(比如标签没有关闭等),这个方法也应该能正常工作。
1 个回答
5
html5lib
让你可以用多种标准的树形格式来解析你的文档。你可以使用 lxml,就像我下面做的那样,或者你也可以按照他们的 用户文档 的说明,使用 minidom、ElementTree 或者 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
字段中。