【问题标题】:Extract HTML Table Based on Specific Column Headers - Python根据特定列标题提取 HTML 表 - Python
【发布时间】:2020-04-01 20:03:46
【问题描述】:

我正在尝试从以下URL 中提取 html 表格。

例如,第 44 页的 2019 年董事薪酬表。我相信该表没有特定的 ID,例如“薪酬表”等。要提取该表,我只能想到匹配列名或然后抓取相关表格。

有没有一种简单的方法可以根据列名提取这些表?或者更简单的方法?

谢谢!

我在抓取 HTML 表格方面相对较新。我的代码如下

from bs4 import BeautifulSoup
import requests
url = 'https://www.sec.gov/Archives/edgar/data/66740/000120677420000907/mmm3661701-def14a.htm'
r = requests.get(url) 
soup = BeautifulSoup(r.text, 'html.parser')
rows = soup.find_all('tr')

【问题讨论】:

  • 预期输出是什么?
  • @BittoBennichan 整张桌子

标签: python html beautifulsoup scrape


【解决方案1】:

当然可以,根据documentation,使用matchattrs 使用pandas read_html 函数。

import pandas as pd

df = pd.read_html(
    "https://www.sec.gov/Archives/edgar/data/66740/000120677420000907/mmm3661701-def14a.htm", attrs={'style': 'border-collapse: collapse; width: 100%; font: 9pt Arial, Helvetica, Sans-Serif'}, match="Non-Employee Directors")

print(df)

df[0].to_csv("data.csv", index=False, header=False)

输出:View-Online

【讨论】:

  • 非常感谢 - 这行得通。如果我们更进一步,您是否认为可以通过许多不同的 html 文件对其进行迭代。会出现的问题是,如果有多个表格包含“非员工董事”,或者格式之间不统一。例如,3M(如上所述)可能会使用“非员工董事”,而 Apple 可能会使用“外部董事”。有什么想法吗?
  • @Patriots_25 你可以匹配 attrs 和位置 [] 只有当它总是在相同的位置!
  • 明白了——所以如果我们查看 Apple 的文件 sec.gov/Archives/edgar/data/320193/000119312520001450/… 包括同一个表,只是它的列标题有很大不同。您能想出任何方法来普遍尝试提取这些表吗?
  • @Patriots_25 到底是哪个表?分享screen-shot
  • 此链接是否适用于屏幕截图? imgur.com/a/OihTSZR 如果它有效 - 看看数据是如何相同的,但文件管理器之间没有统一性。例如,AAPL 将所有数据都放在一个表中...... MMM 将其分解为 2 个表
猜你喜欢
  • 1970-01-01
  • 2019-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 1970-01-01
  • 2021-11-21
  • 1970-01-01
相关资源
最近更新 更多