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

如何使用Selenium将网页数据行提取至DataFrame

解决网页表格数据提取到DataFrame的定位问题

我来帮你一步步解决这个问题——从定位元素到把数据转成DataFrame,其实有很直观的方法,不用自己硬写定位表达式:

1. 用Chrome开发者工具直接生成定位代码

你已经会右键检查元素了,接下来的关键步骤很简单:

  • 在Elements面板里找到目标行(比如第一行数据、最后一行数据,或者任意一行)对应的HTML标签(通常是<tr>)
  • 右键这个标签,选择 Copy -> 选你想用的定位方式:
    • Copy selector:生成CSS选择器,适合简单结构
    • Copy XPath:生成XPath路径,适合复杂结构(比如元素有动态属性)
  • 把复制的内容直接填入find_element的第二个参数就行,比如:
    from selenium.webdriver.common.by import By
    
    # 用CSS选择器定位首行
    first_row = driver.find_element(By.CSS_SELECTOR, "复制的CSS选择器内容")
    # 用XPath定位末行
    last_row = driver.find_element(By.XPATH, "复制的XPath内容")
    

2. 快速定位首行/末行的通用写法

如果不想手动复制,也可以用CSS或XPath的伪类/语法直接定位:

  • 首行:
    • CSS选择器:table tr:first-child(假设表格用<table>标签)
    • XPath:(//table/tr)[1]
  • 末行:
    • CSS选择器:table tr:last-child
    • XPath:(//table/tr)[last()]

3. 提取所有行并转成DataFrame的完整示例

其实大多数时候你需要的是所有行数据,而不是单独的首尾行,这里给你一个完整的可运行代码示例:

from selenium import webdriver
from selenium.webdriver.common.by import By
import pandas as pd
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# 初始化Chrome浏览器
driver = webdriver.Chrome()
driver.get("你的目标网页URL")

# 等待表格加载完成(避免动态加载导致的元素找不到)
wait = WebDriverWait(driver, 10)
all_rows = wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "table tr")))

# 提取每行的单元格数据
table_data = []
for row in all_rows:
    # 提取单元格(<td>是数据单元格,<th>是表头单元格,根据需要调整)
    cells = row.find_elements(By.TAG_NAME, "td")
    row_content = [cell.text.strip() for cell in cells]
    # 跳过空行
    if row_content:
        table_data.append(row_content)

# 转换成DataFrame
df = pd.DataFrame(table_data)
# 如果有表头,可以把第一行设为列名:df.columns = df.iloc[0]; df = df[1:]
print(df)

# 关闭浏览器
driver.quit()

4. 常见坑点排查

  • 如果定位不到元素,先检查目标元素是不是在<iframe>里:如果是,需要先切换到iframe再定位:driver.switch_to.frame("iframe的id或name")
  • 如果页面是动态加载的(比如滚动后才出现数据),一定要用WebDriverWait等待元素加载完成,不要直接用find_elements,否则会拿到空列表
  • 有些网站会用<div>模拟表格,而不是原生的<table>,这时候需要调整定位器,比如用div[class='table-row']这类选择器

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:10:29