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

Beautiful Soup新手求助:爬取在线报告三类指定表格数据

实现方案

核心思路

  • 先通过HTTP请求获取目标页面的完整HTML源码
  • 解析时注意三个目标业务表格都带有BORDER="1"属性,且每个表格的首行表头加粗文本正好对应SUMMARY、Generation、Interchange三个标识,通过这个特征准确定位目标表格,避免抓到外层嵌套的布局表格
  • 逐行遍历定位到的表格,跳过表头行,提取每行单元格的有效文本,整理成结构化数据即可

可直接运行的参考代码

import requests
from bs4 import BeautifulSoup

# 目标页面地址
url = "http://ets.aeso.ca/ets_web/ip/Market/Reports/CSDReportServlet"
# 发起请求获取页面源码
resp = requests.get(url, timeout=10)
resp.encoding = resp.apparent_encoding  # 自动识别编码避免乱码
soup = BeautifulSoup(resp.text, "html.parser")

# 要提取的三个表格名称
target_tables = ["SUMMARY", "Generation", "Interchange"]
result = {}

# 遍历所有带border属性的业务表格(排除外层用于布局的无border表格)
for table in soup.find_all("table", border="1"):
    # 找到当前表格的表头文本
    header_b = table.find("b")
    if not header_b:
        continue
    table_name = header_b.get_text(strip=True)
    if table_name not in target_tables:
        continue
    # 提取当前表格的所有行数据
    table_data = []
    all_rows = table.find_all("tr")
    for row in all_rows[1:]:  # 第一行是表头,直接跳过
        cells = [cell.get_text(strip=True) for cell in row.find_all(["td", "th"])]
        # 过滤空行
        if cells:
            table_data.append(cells)
    result[table_name] = table_data

# 打印测试输出
for table_name, data in result.items():
    print(f"===== {table_name} 表格数据 =====")
    for row in data:
        print(row)

使用说明

  • 代码默认把每个表格的数据存为二维列表,如果需要键值对格式(比如SUMMARY表是两列的指标名+数值结构),可以直接把对应行的两个元素组装成字典
  • 如果后续页面表格样式微调,只要调整匹配表格的属性判断逻辑即可,提取到的数据可以直接写入CSV、数据库做后续分析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:24:16