2013-05-13 26 views
5

我试图使用lxml模块,如解析网络上的各种网页:如何在python中检查页面是否基于html5?

def dom(self): 
    return lxml.html.fromstring(self.content) 

但好像我一定要关掉这个lxml.htmllxml.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)) 

回答

0

您不必切换到仅对HTML5文件使用HTML5parser。您可以并可能应该将HTML5parser用于所有HTML文件。浏览器始终对所有HTML文件使用兼容HTML5的解析器,无论版本如何。

+0

谢谢你的回复,但我发现用'lxml.html'解析html5文件变成了一堆乱码文本。 – ernix 2013-05-13 07:32:33

+0

@ernix,这与Alohci的回答相反。让我重复Alohci的答案:你应该使用html5parser作为非html5文件,而不是像你说的那样在html5上使用lxml.html。 – krawyoti 2013-05-23 09:31:12

+0

@krawyoti,谢谢。但html5与旧的html不兼容。标签名称必须使用html5小写。在'html5lib'版本“1.0b2”中,我可以看到'html5lib/inputstream.py:EncodingParser.getEncoding'解析'',但是不能正确地解析''。 – ernix 2013-05-24 02:18:50

相关问题