我正在尝试使用lxml模块解析Web上的各种页面,例如:
def dom(self):
return lxml.html.fromstring(self.content)
Run Code Online (Sandbox Code Playgroud)
但似乎我必须在html5页面的情况下切换lxml.html到这一点lxml.html.html5parser.
http://lxml.de/html5parser.html
那么如何确定页面是否基于html5?DOCTYPE在解析之前我是否必须通过char 检查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))
Run Code Online (Sandbox Code Playgroud)
您不必切换为仅对 HTML5 文件使用 HTML5parser。您可以而且可能应该对所有 HTML 文件使用 HTML5 解析器。无论版本如何,浏览器始终对所有 HTML 文件使用 HTML5 兼容解析器。
| 归档时间: |
|
| 查看次数: |
348 次 |
| 最近记录: |