0

html ファイルのコレクションから抽出する必要があるデータがいくつかあります。データが div 要素、table 要素、または結合要素 (div タグは table の要素) に存在するかどうかはわかりません。3 つのケースすべてを見てきました。私のファイルは 2 MB の大きさで、私は何万ものそれらを持っています. これまでのところ、私はテーブルの td 要素を見て、孤独な div 要素を見てきました. 私には、ファイルがスープ化されるのに最も長い時間がかかり、30 秒以上かかるようです.正規表現を作成して探しているデータを見つけてから、次の閉じたタグテーブル、tr、td、または div を探して、テキストが含まれている構造のタイプを特定しました。一致する開始タグを見つけて、そのセクションを切り取り、HTML の開始タグと終了タグですべてラップする

 stuff

 <div>
 stuff
 mytext
 stuff
 </div>

したがって、次のような文字列を作成します。

s='<div>stuffmyTextstuff</div>'

次に、文字列をラップします

 def stringWrapper(s):
     newString='<HTML>'+s+'</HTML>'
     return newString

そして、BeautifulSoupを使用します

littleSoup=BeautifulSoup(newString)

その後、BeautifulSoup のパワーにアクセスして、newString で必要なことを実行できます。

これは、テキストが見つかるまですべてのテーブルのすべてのセルの内容を最初にテストし、テキストが見つからない場合はすべての div の内容をテストするという代替手段よりもはるかに高速に実行されます。

ここで何か不足していますか?

4

4 に答える 4

3

試しましたlxmlか?BeautifulSoup は優れていますが、超高速ではありませんlxml。同じ品質でパフォーマンスが向上することが多いと思います。

于 2009-05-19T02:11:37.763 に答える
3

BeautifulSoup は内部で regex を使用するため (それが他の XML パーサーとの違いです)、おそらく同じことを繰り返していることに気付くでしょう。より高速なオプションが必要な場合は、まず try/catch を使用して lxml または etree の解析を試み、パーサーが失敗した場合は BeautifulSoup や tidylib を使用して壊れた HTML を解析してみてください。

あなたがやっていることは、XPathまたはXSLTを使用してデータを見つけて取得したいと本当に思っているようです.lxmlは両方を行うことができます.

最後に、ファイルのサイズを考えると、おそらくパスまたはファイル ハンドルを使用して解析する必要があります。これにより、解析のためにソースをメモリに保持するのではなく、段階的に読み取ることができます。

于 2009-05-19T02:42:28.687 に答える
1

あなたが何をしようとしているのか、よくわかりません。しかし、div 文字列を < html> タグで囲む必要がないことはわかっています。BSはそれをうまく解析します。

于 2009-05-19T02:47:00.673 に答える