5

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))
4

1 に答える 1