【发布时间】:2013-05-07 02:20:33
【问题描述】:
我正在尝试使用lxml 模块解析网络上的各种页面,例如:
def dom(self):
return lxml.html.fromstring(self.content)
但对于 html5 页面,我似乎必须将此 lxml.html 切换为 lxml.html.html5parser。
http://lxml.de/html5parser.html
那么如何确定一个页面是否基于 html5?我必须在解析之前逐个检查DOCTYPE char 吗?
编辑:我做了一个简单的正则表达式来处理这个问题。它似乎有效,但是,是的,我仍在寻找一些巧妙的方法。这个解决方案打破了sourceline 方法。
import lxml.html
from lxml.html import html5parser
def dom(self):
content = self.content
if self._is_html5():
elm = html5parser.fromstring(content)
content = lxml.html.tostring(elm, method='html')
return lxml.html.fromstring(content)
def _is_html5(self):
return bool(re.match(r'^<!doctype html>', self.content, re.I))
【问题讨论】: