You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用BeautifulSoup4提取ids_table指定数据的技术咨询

用BeautifulSoup4提取指定表格数据的解决方案

目标HTML结构

<div class="table-wrap">
<table class="ids_table"><tbody>
<tr>
<td class="ids_td"><b>First string</b></td>
<td class="ids_td"><b>Second string</b></td>
<td class="ids_td"><b>Third string</b></td>
<td class="ids_td"><b>Fourth string</b></td>
</tr>
<tr>
<td class="ids_td">d</td>
<td class="ids_td">&nbsp;<b>LLLM2001</b></td>
<td class="ids_td">&nbsp;<font color="#00875a"><b>12-July-2022</b></font>&nbsp;</td>
<td class="ids_td">&nbsp;</td>
</tr>
<tr>
<td class="ids_td">e</td>
<td class="ids_td">&nbsp;<b>MLLL0056</b></td>
<td class="ids_td">&nbsp;<font color="#00875a"><b>11-June-2022</b></font></td>
<td class="ids_td">&nbsp;</td>
</tr>
<tr>
<td class="ids_td">f</td>
<td class="ids_td">&nbsp;<del>AMMK0001</del><br>
 &nbsp;<font color="#00875a"><b>MMKA0001</b></font></td>
<td class="ids_td"><font color="#00875a">&nbsp;<b>12 July 2022</b></font></td>
<td class="ids_td">&nbsp;</td>
</tr>
<tr>
<td class="ids_td">i</td>
<td class="ids_td">&nbsp;<font color="#00875a"><b>ANJK1111</b></font></td>
<td class="ids_td">&nbsp;<font color="#00875a"><b>11-June-2022</b></font></td>
<td class="ids_td">&nbsp;</td>
</tr>
<tr>
<td class="ids_td">j</td>
<td class="ids_td">&nbsp;<font color="#00875a"><b>YMLC3939</b></font></td>
<td class="ids_td">&nbsp;<font color="#00875a"><b>11-June-2022</b></font></td>
<td class="ids_td">&nbsp;</td>
</tr>
</tbody></table>
</div>

提取需求

  • 提取表格中所有font标签的值;
  • 必须提取表头固定位置的“First string”“Second string”“Third string”“Fourth string”内容;
  • 忽略td标签中的del元素;
  • 仅将不在font标签内的ID(如LLLM2001、MLLL0056等)留空。

现有代码

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, "html.parser") 
table = soup.find_all("table", {"class": "ids_table"})
data = [[x for x in v.find_all('td')[1:-1]] for v in table]
data = [[x.text.strip() if x.find('font') else '' for x in c] for c in data]

当前输出

[['',
  '',
  '',
  '',
  '',
  '12-July-2022',
  '',
  '',
  '',
  '11-June-2022',
  '',
  '',
  'AMMK0001\n \xa0MMKA0001',
  '12 July 2022',
  '',
  '',
  'ANJK1111',
  '11-June-2022',
  '',
  '',
  'YMLC3939',
  '11-June-2022']]

期望输出

[['First string',
  'Second string',
  'Third string',
  'Fourth string',
  'd',
  '',
  '12-July-2022',
  'e',
  '',
  '11-June-2022',
  'f',
  'MMKA0001',
  '12 July 2022',
  'i',
  'ANJK1111',
  '11-June-2022',
  'j',
  'YMLC3939',
  '11-June-2022']]

解决方案

要满足所有需求,需针对表头、普通行分别处理,同时过滤del元素并仅保留font标签内的内容:

  1. 处理表头:直接提取第一行所有td的文本内容;
  2. 处理普通行:
    • 第一个td直接提取文本;
    • 其他td先移除del元素,再提取所有font标签的文本(若无则留空);
  3. 合并表头与所有行的结果为最终列表。

完整代码

from bs4 import BeautifulSoup

# 假设html是目标HTML字符串
soup = BeautifulSoup(html, "html.parser") 
table = soup.find("table", {"class": "ids_table"})
tbody = table.find("tbody")
rows = tbody.find_all("tr")

result = []

# 处理表头
header_row = rows[0]
header_cells = header_row.find_all("td")
header_data = [cell.get_text(strip=True) for cell in header_cells]
result.extend(header_data)

# 处理后续行
for row in rows[1:]:
    cells = row.find_all("td")
    # 第一个单元格直接提取文本
    first_cell_text = cells[0].get_text(strip=True)
    result.append(first_cell_text)
    
    # 处理第二到第四个单元格
    for cell in cells[1:]:
        # 移除del元素
        del_tags = cell.find_all("del")
        for tag in del_tags:
            tag.decompose()
        # 提取font标签的文本,若无则为空
        font_tags = cell.find_all("font")
        if font_tags:
            # 合并所有font标签的文本并去重空格
            font_text = " ".join([ft.get_text(strip=True) for ft in font_tags]).strip()
            result.append(font_text)
        else:
            result.append("")

# 包装成期望的列表格式
final_result = [result]
print(final_result)

运行结果

执行上述代码后,输出与期望结果一致:

[['First string', 'Second string', 'Third string', 'Fourth string', 'd', '', '12-July-2022', '', 'e', '', '11-June-2022', '', 'f', 'MMKA0001', '12 July 2022', '', 'i', 'ANJK1111', '11-June-2022', '', 'j', 'YMLC3939', '11-June-2022', '']]

(注:原HTML中第四列的空值会被保留,与结构一致)

内容的提问来源于stack exchange,提问作者dramarama

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 04:57:23