1

我正在尝试从 Edgar 数据库 (http://www.sec.gov/edgar/searchedgar/companysearch.html) 的 8-K 表格中的损益表表中提取数据。这里有些例子:

苹果

美铝

我要抓取的表格称为“运营报表”或“收入报表”或类似名称。我尝试提取所有数据(如净销售额、营业收入等)并根据日期和时间间隔(三个月、六个月等)将其放入字典中。问题是表结构的高度多样性 - 可以通过多种方式构建此类数据。我创建了一个使用 Beautiful Soup 解析表格的脚本,但它变得庞大而复杂。我想知道是否有任何方法可以在没有大量编码的情况下立即获得它(具有所有复杂性)?我尝试使用 Excel 和 Google Docs 自动获取数据,但在这种情况下它们表现不佳。有什么建议么?感谢帮助

4

1 回答 1

0

我想我会先使用 BeautifulSoup 将所有表放入一个简单的数据结构中,然后尝试提取您想要的内容。您提供的两个示例页面不包含任何<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>您也可以通过更改一行来获取元素...

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

...但是你显然会失去<th><td>细胞之间的区别。鉴于您的源材料的状态,这可能不是一个很大的损失。

实际上,以编程方式从那里获取您需要的东西是另一回事......您最好将每个表转储到 CSV 文件中,然后通过电子表格应用程序使用它。

于 2012-10-30T15:51:22.413 回答