从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
相关产品推荐
相关产品推荐

