【问题标题】:extracting data from diverse HTML tables从不同的 HTML 表中提取数据
【发布时间】:2012-10-19 17:44:57
【问题描述】:

我正在尝试从 Edgar 数据库 (http://www.sec.gov/edgar/searchedgar/companysearch.html) 的 8-K 形式的损益表中提取数据。以下是一些示例:

Apple

Alcoa

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

【问题讨论】:

    标签: python html html-table


    【解决方案1】:

    我想我会先使用 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-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      相关资源
      最近更新 更多