如何抓取每行类名不同且含嵌套元素的动态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
相关产品推荐
相关产品推荐

