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

如何基于表格外文本关键词筛选抓取表格并标记序号?

问题

需要从指定网站抓取表格,但仅保留**前置纯文本描述包含"GOOD_KEYWORD"**的表格;同时要给抓取到的表格新增「Table ID」列,记录表格的全局序号(被跳过的表格序号空缺,明确标识筛选过程)。

网站示例源码

<blockquote>
<p>Text Text Text Text BAD_KEYWORD Text Text Text</p>
</blockquote>
<div class="s-table-container">
<table class="s-table">
<thead>
<tr>
<th>Table</th>
<th>Another header</th>
</tr>
</thead>
<tbody>
<tr>
<td>First</td>
<td>row</td>
</tr>
<tr>
<td>Second</td>
<td>row</td>
</tr>
</tbody>
</table>
</div>
<blockquote>
<p>Text Text Text GOOD_KEYWORD Text Text Text
Blockquote</p>
</blockquote>
<div class="s-table-container">
<table class="s-table">
<thead>
<tr>
<th>Table</th>
<th>Another header</th>
</tr>
</thead>
<tbody>
<tr>
<td>First</td>
<td>row</td>
</tr>
<tr>
<td>Second</td>
<td>row</td>
</tr>
<tr>
<td>Third</td>
<td>row</td>
</tr>
</tbody>
</table>
</div>

预期抓取结果

<div class="s-table-container">
<table class="s-table">
<thead>
<tr>
<th>Table</th>
<th>Another header</th>
<th>Table ID</th>
</tr>
</thead>
<tbody>
<tr>
<td>First</td>
<td>row</td>
<td>2</td>
</tr>
<tr>
<td>Second</td>
<td>row</td>
<td>2</td>
</tr>
<tr>
<td>Third</td>
<td>row</td>
<td>2</td>
</tr>
</tbody>
</table>
</div>

实现思路与代码示例

用Python结合BeautifulSoup可以实现需求,核心步骤:

  1. 遍历页面所有表格容器,从1开始分配全局序号
  2. 定位每个表格的前置描述块,提取纯文本检查是否含目标关键词
  3. 对符合条件的表格,新增「Table ID」表头和对应单元格,填充全局序号
  4. 收集并输出处理后的表格

完整代码

from bs4 import BeautifulSoup

# 替换为实际获取的网站源码
html_content = """
<blockquote>
<p>Text Text Text Text BAD_KEYWORD Text Text Text</p>
</blockquote>
<div class="s-table-container">
<table class="s-table">
<thead>
<tr>
<th>Table</th>
<th>Another header</th>
</tr>
</thead>
<tbody>
<tr>
<td>First</td>
<td>row</td>
</tr>
<tr>
<td>Second</td>
<td>row</td>
</tr>
</tbody>
</table>
</div>
<blockquote>
<p>Text Text Text GOOD_KEYWORD Text Text Text
Blockquote</p>
</blockquote>
<div class="s-table-container">
<table class="s-table">
<thead>
<tr>
<th>Table</th>
<th>Another header</th>
</tr>
</thead>
<tbody>
<tr>
<td>First</td>
<td>row</td>
</tr>
<tr>
<td>Second</td>
<td>row</td>
</tr>
<tr>
<td>Third</td>
<td>row</td>
</tr>
</tbody>
</table>
</div>
"""

soup = BeautifulSoup(html_content, 'html.parser')
table_containers = soup.find_all('div', class_='s-table-container')
filtered_tables = []

# 遍历所有表格,按顺序分配序号
for table_idx, container in enumerate(table_containers, start=1):
    # 获取表格的前置描述块(根据实际网站结构调整选择器)
    prev_desc = container.find_previous_sibling('blockquote')
    if not prev_desc:
        continue
    
    # 检查前置文本是否包含目标关键词
    desc_text = prev_desc.get_text(strip=True)
    if 'GOOD_KEYWORD' in desc_text:
        target_table = container.find('table')
        
        # 给表头添加Table ID列
        header_row = target_table.find('thead').find('tr')
        new_header = soup.new_tag('th')
        new_header.string = 'Table ID'
        header_row.append(new_header)
        
        # 给每一行添加Table ID单元格,填充当前序号
        for row in target_table.find('tbody').find_all('tr'):
            new_cell = soup.new_tag('td')
            new_cell.string = str(table_idx)
            row.append(new_cell)
        
        filtered_tables.append(container)

# 输出处理后的表格(可根据需求保存为文件或进一步处理)
for table in filtered_tables:
    print(table.prettify())

关键说明

  • 序号从1开始全局递增,被跳过的表格序号自动空缺,符合筛选逻辑
  • 前置描述块的选择器(find_previous_sibling('blockquote'))需根据实际网站结构调整,比如如果描述是<p>标签,就改成对应选择器
  • 代码中直接打印处理后的HTML,可根据需求修改为保存到文件或导入到Excel等操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:15:54