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