1

Edgar データベース (http://www.sec.gov/edgar/searchedgar/companysearch.html) から 8-K フォームの損益計算書テーブルからデータを抽出しようとしています。ここではいくつかの例を示します。

アップル

アルコア

スクレイピングしたいテーブルは、'STATEMENTS OF OPERATIONS' または 'Statements of Income' などと呼ばれます。すべてのデータ (純売上高、営業利益など) を抽出し、日付と時間間隔 (3 か月、6 か月など) に従って辞書に入れるようにしています。問題は、テーブル構造が非常に多様であることです。そのようなデータを構造化する方法はたくさんあります。Beautiful Soup を使用してテーブルを解析するスクリプトを作成しましたが、大きく複雑になっています。多くのコーディングをせずに(すべての複雑さで)すぐに取得する方法があるのだろうか?Excel と Google Docs を使用してデータを自動的に取得しようとしましたが、この場合はパフォーマンスが低下します。助言がありますか?手伝ってくれてありがとう

4

1 に答える 1

0

最初に BeautifulSoup を使用してすべてのテーブルを単純なデータ構造にしてから、必要なものを抽出しようとします。あなたが提供する2つのサンプルページには要素が含まれていない<th>ため、これらの場合、次のように基本的な抽出を処理できます。

from BeautifulSoup import BeautifulSoup

def tables(html):
    """Extract all tables from `html`."""
    soup = BeautifulSoup(html)
    return [[
            [cell.text for cell in row.findAll("td")]
            for row in table.findAll("tr")]
        for table in soup.findAll("table")]

...これにより、テーブルのリストが表示されます。各テーブルは行のリストであり、各テーブルはセルのリストです。

警告: ネストされたテーブルが潜んでいる場合、上記のコードはひどく間違っている可能性があります。

<th>1行を変更することで要素を取得することもできます...

            [cell.text for cell in row.findAll(["td", "th"])]

<th>...しかし、そうすると、セルとセルの区別が明らかに失われます<td>。ソース素材の状態を考えると、それほど大きな損失ではないかもしれません。

実際にそこから必要なものをプログラムで取得することは別の問題です...各テーブルをCSVファイルにダンプしてから、スプレッドシートアプリケーションを介してそれを操作する方がよい場合があります.

于 2012-10-30T15:51:22.413 に答える