lxml
次のようなモジュールを使用して、Web上のさまざまなページを解析しようとしています:
def dom(self):
return lxml.html.fromstring(self.content)
しかし、html5ページの場合、これlxml.html
を切り替える必要があるようです。lxml.html.html5parser
http://lxml.de/html5parser.html
では、ページが html5 ベースかどうかを判断するにはどうすればよいでしょうか? DOCTYPE
解析する前に 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))