0

テキストに変換したいhtmlファイルがいくつかあります。私はBeautifulSoupをいじって、手順の使用方法を理解する上である程度の進歩を遂げ、htmlを送信してテキストを取り戻すことができます。

ただし、私のファイルには、テーブル構造を使用してフォーマットされたテキストがたくさんあります。たとえば、テーブルタグのセット内のtdタグにあるテキストの段落があるかもしれません

<table>
<td> here is some really useful information and there might be other markup tags but
     this information is really textual in my eyes-I want to preserve it
 </td>
</table>

そして、テーブルの本体内にデータを持つ「クラシックテーブル」があります。

テーブルにアルゴリズムを適用し、ドキュメントをテキストに変換する前にテーブルがリッピングされるかどうかを決定するいくつかのルールを設定できるようにしたいと思います。

テーブルの特性を取得する方法を理解しました。たとえば、各テーブルの列数を取得するには、次のようにします。

numbCols=[]
for table in soup.findAll('table'):
    rows=[]
    for row in table.findAll('tr'):
        columns=0
        for column in row.findAll('td'):
            columns+=1
        rows.append(columns)
    numbCols.append(rows)

そのため、numbColsを操作し、リスト内の各アイテムのlenとリスト内の各アイテムの値を使用して、テーブルの特性を分析し、保持または破棄するテーブルを特定できます。

この情報をBeautifulSoupで使用してテキストを取得するためのエレガントな方法を見ていません。私が得ようとしているのは、numbColsを分析し、特定のドキュメントの10個のテーブルのうち、テーブル2、4、6、および9を除外することを決定したとします。したがって、htmlドキュメントの一部にはそれら以外のすべてが含まれます。テーブル。どうすればそのようにスープをセグメント化できますか?

私が思いついた解決策は、最初にfinditerを使用してオープンテーブルタグとクローズテーブルタグのそれぞれの位置を特定し、スパンを取得してから、numbColsでスパンを圧縮することです。次に、このリストを使用して、文字列の断片を切り取って結合できます。これが完了したら、BeautifulSoupを使用してhtmlをテキストに変換できます。

私はBeautifulSoupでこれらすべてを行うことができるはずだと確信しています。既存の例への提案やリンクは素晴らしいでしょう。私のソースファイルは大きくなる可能性があり、何千もの処理が必要です。

答えはありませんでしたが、近づいています

4

1 に答える 1

0

男私はこのようなものが大好きです単純なケースで、列の長さが3より大きい行を持つすべてのテーブルを削除したいと仮定します私の答えは

for table in soup.findAll('table'):
    rows=[]
    for row in table.findAll('tr'):
        columns=0
        for column in row.findAll('td'):
            columns+=1
            rows.append(columns)
        if max(rows)>3:
          table.delete()

そのループ内の任意のレベルで必要な処理を実行できます。必要なのは、テストを識別し、テストする適切なインスタンスを取得することだけです。

于 2009-05-16T05:00:33.917 に答える