4

私はいくつかのランダムな HTML を持っていて、それを解析するために BeautifulSoup を使用しましたが、ほとんどの場合 (>70%) チョークします。Beautiful Soup 3.0.8 と 3.2.0 を使ってみましたが(3.1.0 以上は若干問題あり)、結果はほぼ同じです。

Python で利用可能ないくつかの HTML パーサー オプションを頭のてっぺんから思い出すことができます。

  • 美しいスープ
  • lxml
  • パイクエリ

これらすべてをテストするつもりですが、テストでどれが最も寛容で、悪いHTMLを解析しようとすることさえできるか知りたいと思いました.

4

4 に答える 4

3

それらはすべてです。lxml.html が解析できなかった、野生で見つかった html ページにまだ遭遇していません。解析しようとしているページに lxml barfs がある場合、正規表現を使用していつでも前処理して lxml を満足させることができます。

lxml 自体はかなり厳密ですlxml.htmlが、別のパーサーであり、非常に壊れた html を処理できます。非常に壊れたhtmlの場合、lxmllxml.html.soupparserにはBeautifulSoupライブラリとのインターフェースも付属しています。

lxml.html を使用して壊れた html を解析するいくつかの方法については、http://lxml.de/elementsoup.html で説明しています

于 2011-07-29T08:30:13.400 に答える
2

私は解析のためにhtml5libでBeautifulSoup 4.0を使用することになりましたが、はるかに寛容で、コードにいくつかの変更を加えることで、かなりうまく機能しています。すべての提案に感謝します。

于 2011-08-01T09:20:21.553 に答える
2

他に何も機能しないページ (ネストされた<form>要素を含むページが思い浮かびます) では、MinimalSoupICantBelieveItsBeautifulSoupで成功しました。どちらも特定のタイプのエラーを処理できますが、他のエラーは処理できないことが多いため、両方を試す必要があります。

于 2011-07-29T12:21:30.600 に答える
1

beautifulsoup で html の問題が解決しない場合、次善の策は正規表現です。lxml、elementtree、minidom は解析が非常に厳密であり、実際には正しく機能しています。

その他のヒント:

  1. コマンドプロンプトを介してhtmlをlynxブラウザーにフィードし、ページ/コンテンツのテキストバージョンを取り出し、正規表現を使用して解析します。

  2. html をテキストに、または html をマークダウンに変換すると、すべての html タグが取り除かれ、テキストが残ります。これは簡単に解析できます。

于 2011-07-29T08:27:41.723 に答える