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

如何抓取每行类名不同且含嵌套元素的动态HTML表格?

抓取目标表格并生成DataFrame的解决方案

核心问题分析

你之前的代码直接取整行的text,但因为表格里有嵌套元素、每行class不统一,导致所有列的文本混在一起没法拆分。解决的关键是定位每行里的具体列元素,逐个提取文本,而不是直接取整行内容。

具体实现步骤

  • 先定位到目标表格(可通过tag_name找<table>,或结合属性做更精准定位)
  • 提取表头列名,作为DataFrame的列标识
  • 遍历表格的每一行,对每行遍历所有<td>元素,提取每个单元格的文本
  • 将所有行的单元格数据收集成列表,再转成pandas的DataFrame

代码示例

from selenium import webdriver
from selenium.webdriver.common.by import By
import pandas as pd

# 初始化浏览器驱动(根据你的浏览器调整,比如Chrome/Firefox)
driver = webdriver.Chrome()
driver.get("https://www.egp.gov.bt/resources/common/TenderListing.jsp?lang=en_US&langForMenu=en_US&h=t")

# 定位目标表格(若页面有多个表格,可补充id/属性进一步精准定位)
table = driver.find_element(By.TAG_NAME, "table")

# 提取表头列名
headers = [header.text.strip() for header in table.find_elements(By.TAG_NAME, "th")]

# 收集所有行数据
rows_data = []
# 遍历所有行(跳过表头行,从索引1开始)
for row in table.find_elements(By.TAG_NAME, "tr")[1:]:
    # 提取该行每个单元格的文本
    row_cells = [cell.text.strip() for cell in row.find_elements(By.TAG_NAME, "td")]
    # 过滤空行
    if row_cells:
        rows_data.append(row_cells)

# 生成DataFrame
df = pd.DataFrame(rows_data, columns=headers)
print(df)

# 关闭浏览器驱动
driver.quit()

补充说明

  • 如果行的class有区分(比如交替行用不同class),可以用By.CSS_SELECTOR统一定位所有行,比如table tr.bgColor-white, table tr.other-class
  • 如果某些单元格包含嵌套链接或特殊元素,可针对子元素提取内容,比如cell.find_element(By.TAG_NAME, "a").get_attribute("href")提取链接地址

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:07:07