5
我试图使用lxml
模块,如解析网络上的各种网页:如何在python中检查页面是否基于html5?
def dom(self):
return lxml.html.fromstring(self.content)
但好像我一定要关掉这个lxml.html
到lxml.html.html5parser
在HTML5网页的情况。
http://lxml.de/html5parser.html
所以,我怎么能确定一个页面是基于HTML5的?在解析它之前,我必须检查字符DOCTYPE
吗?
编辑:我做了一个简单的正则表达式来处理这个问题。它似乎工作,但是,我仍然在寻找一些干净利落的方式。该解决方案打破了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))
谢谢你的回复,但我发现用'lxml.html'解析html5文件变成了一堆乱码文本。 – ernix 2013-05-13 07:32:33
@ernix,这与Alohci的回答相反。让我重复Alohci的答案:你应该使用html5parser作为非html5文件,而不是像你说的那样在html5上使用lxml.html。 – krawyoti 2013-05-23 09:31:12
@krawyoti,谢谢。但html5与旧的html不兼容。标签名称必须使用html5小写。在'html5lib'版本“1.0b2”中,我可以看到'html5lib/inputstream.py:EncodingParser.getEncoding'解析'',但是不能正确地解析''。 – ernix 2013-05-24 02:18:50