2013-05-13 46 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

相關問題