要約すると、lxml
超高速の製品品質の html および xml パーサーとして位置付けられます。ちなみに、soupparser
BeautifulSoup の機能にフォールバックするモジュールも含まれています。BeautifulSoup
は 1 人で行うプロジェクトであり、時間を節約して、不適切な形式の html または xml からデータをすばやく抽出できるように設計されています。
lxml のドキュメントには、両方のパーサーに長所と短所があると記載されています。このため、前後に切り替えることができるようにlxml
用意されています。soupparser
引用、
BeautifulSoup は別の解析アプローチを使用します。これは実際の HTML パーサーではありませんが、正規表現を使用してタグ スープを調べます。したがって、より寛容な場合もあれば、あまり良くない場合もあります。lxml/libxml2 が破損した HTML をより適切に解析および修正することは珍しくありませんが、BeautifulSoup はエンコーディング検出の優れたサポートを備えています。どのパーサーがより適切に機能するかは、入力に大きく依存します。
結局のところ、彼らはこう言っています。
このパーサーを使用することの欠点は、lxml の HTML パーサーよりもはるかに遅いことです。したがって、パフォーマンスが重要な場合は、特定のケースのフォールバックとしてのみスープパーサーを使用することを検討してください。
私がそれらを正しく理解していれば、それはスープパーサーがより堅牢であることを意味します---正規表現を使用して不正な形式のタグの「スープ」を処理できます--一方、lxml
より単純で、物事を解析してツリーを構築するだけです期待するでしょう。forBeautifulSoup
だけでなく、それ自体にも当てはまると思います。soupparser
lxml
BeautifulSoup
また、 で高速に解析しながら、 のエンコーディング検出を利用する方法も示していlxml
ます。
>>> from BeautifulSoup import UnicodeDammit
>>> def decode_html(html_string):
... converted = UnicodeDammit(html_string, isHTML=True)
... if not converted.unicode:
... raise UnicodeDecodeError(
... "Failed to detect encoding, tried [%s]",
... ', '.join(converted.triedEncodings))
... # print converted.originalEncoding
... return converted.unicode
>>> root = lxml.html.fromstring(decode_html(tag_soup))
(同じソース: http://lxml.de/elementsoup.html )。
BeautifulSoup
の作成者の言葉で、
それでおしまい!楽しむ!みんなの時間を節約するために Beautiful Soup を書きました。慣れれば、デザインの悪い Web サイトからわずか数分でデータを取り出せるようになります。コメントがある場合、問題が発生した場合、または Beautiful Soup を使用するプロジェクトについて知りたい場合は、メールをお送りください。
--Leonard
Beautiful Soupのドキュメントから引用。
これが明確になったことを願っています。スープは、設計が不十分な Web サイトからデータを抽出する時間を節約できるように設計された、素晴らしい 1 人プロジェクトです。目標は、今すぐ時間を節約して仕事を終わらせることであり、必ずしも長期的に時間を節約することではなく、ソフトウェアのパフォーマンスを最適化することでもありません。
また、lxml の Web サイトから、
lxml は Python Package Index から 200 万回以上ダウンロードされており、Linux や MacOS-X などの多くのパッケージ ディストリビューションで直接利用することもできます。
そして、Why lxml?から。、
C ライブラリ libxml2 と libxslt には大きなメリットがあります:... 標準準拠... フル機能... 高速。速い!速い!... lxml は libxml2 と libxslt の新しい Python バインディングです...