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

从HTML标签嵌套混乱的网页抓取‘Metropolitan tram’表格数据

定位并抓取"Metropolitan tram"表格数据

要精准定位目标表格,可通过先匹配对应标题元素,再定位其后续的表格容器来实现,具体步骤与代码如下:

实现思路

  • 先定位包含「Metropolitan tram」文本的<h3>标题元素,以此为锚点锁定目标区域
  • 从标题元素出发,找到紧随其后的.table__wrapper容器(即表格的外层包裹)
  • 解析容器内的表格结构,提取表头与行数据

修正后的代码

import requests
from bs4 import BeautifulSoup

URL = "https://www.ptv.vic.gov.au/footer/data-and-reporting/network-performance/daily-performance/"
page = requests.get(URL)
soup = BeautifulSoup(page.content, "html.parser")

# 定位Metropolitan tram的标题元素
tram_title = soup.find("h3", string="Metropolitan tram")
if tram_title:
    # 找到标题后首个目标表格容器
    tram_table_wrapper = tram_title.find_next_sibling("div", class_="mceTmpl table__wrapper")
    if tram_table_wrapper:
        # 提取表格主体
        table = tram_table_wrapper.find("table")
        if table:
            # 提取表头文本
            headers = [th.get_text(strip=True) for th in table.find_all("th")]
            print("表头:", headers)
            
            # 提取每一行数据
            rows = []
            for tr in table.find_all("tr")[1:]:  # 跳过表头行
                row_data = [td.get_text(strip=True) for td in tr.find_all("td")]
                rows.append(row_data)
            
            print("\n表格数据:")
            for row in rows:
                print(row)
else:
    print("未找到Metropolitan tram标题元素")

代码说明

  • soup.find("h3", string="Metropolitan tram"):通过精准匹配标题文本,锁定目标表格的前置锚点
  • tram_title.find_next_sibling(...):从标题元素出发,直接定位到同级的表格包裹容器,避免抓取无关表格
  • 后续通过遍历<th>和<td>标签,将表格内容解析为结构化的表头与行数据,方便后续处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 17:10:37