使用 BeautifulSoup 从表中提取 tds 并将它们与表 id 一起排列在 Pandas 数据框中

Posted

技术标签:

【中文标题】使用 BeautifulSoup 从表中提取 tds 并将它们与表 id 一起排列在 Pandas 数据框中【英文标题】:Extraction of tds from table using BeautifulSoup and arranging them in Pandas dataframe together with the table id 【发布时间】:2022-01-18 23:54:32 【问题描述】:

我提取了以下 html 代码:

<table id=table1>

  <thead>
    <tr class="table_columns">
      <th id="header1">
        "Column 1 Title"
      </th>
      <th id="header2">
        "Column 2 Title"
      </th>
    </tr>
  </thead>
  
  <tbody>
    <tr class="evenRow">
      <td headers="header1">firstrowcolumn1data</td>
      <td headers="header2">firstrowcolumn2data</td>
    </tr>
    <tr class="oddRow">
      <td headers="header1">secondrowcolumn1data</td>
      <td headers="header2">secondrowcolumn2data</td>
    </tr>
  </tbody>
</table>

我需要提取表(table1)的表数据和id,然后将它们排列成一个Pandas数据框,类似这样:

id table data
table1 firstrowcolumn1data
table1 firstrowcolumn2data
table1 secondrowcolumn1data
table1 secondrowcolumn2data

【问题讨论】:

【参考方案1】:

试试这个:

data = []
for table in s.find_all('table'):
    for td in table.find_all('td'):
        data.append((table.get('id'), td.text))
df = pd.DataFrame(data, columns=['id', 'table data'])

输出:

>>> df
       id            table data
0  table1   firstrowcolumn1data
1  table1   firstrowcolumn2data
2  table1  secondrowcolumn1data
3  table1  secondrowcolumn2data

【讨论】:

嗨@user17242583。我意识到该解决方案会产生重复项。一组具有表的实际 id,而另一组具有“无”作为 id。我检查了我爬取的 html 代码,找不到任何重复的表格。这有什么原因吗? 不确定,@Tipo33。你为什么不就此提出一个新问题,因为在 cmets 中很难讨论。

以上是关于使用 BeautifulSoup 从表中提取 tds 并将它们与表 id 一起排列在 Pandas 数据框中的主要内容,如果未能解决你的问题,请参考以下文章

使用 BeautifulSoup 从表的前两列中提取日期并将它们排列在 Pandas 数据框中,没有重复

带有子模式异常的正则表达式模式 (Python)

BeautifulSoup验证“title”td以提取多个表的值

根据复选框选中的属性从表中选择单元格值

如何从 BeautifulSoup ( Python ) 中的表中获取第一个子表行

Python - Selenium 和 XPATH 从表中提取所有行