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

Selenium获取属性后如何将列表合并为单个DataFrame?

解决Selenium爬虫数据合并为单个DataFrame的问题

嘿,我明白你现在的困扰啦!你每次循环都生成了独立的小DataFrame,但因为没把这些数据保存下来,最后没法合并成一个完整的结果。其实只需要先把所有数据收集起来,再一次性转换成DataFrame就搞定了,给你两种简单的解决方案:

方法一:直接收集数据列表(推荐,更高效)

这种方法先把每一行的数据存入一个空列表,循环结束后再生成完整的DataFrame,避免多次创建小DataFrame的额外开销:

import pandas as pd
import numpy as np
import requests
from csv import writer
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.keys import Keys

chrome_options = Options()
chrome_options.add_argument("--headless")
driver = webdriver.Chrome(ChromeDriverManager().install())

# 登录流程
url = 'https://accounts.hedgeye.com/users/sign_in'
driver.get(url)
username = driver.find_element_by_id("user_email")
password = driver.find_element_by_id("user_password")
username.send_keys("")
password.send_keys("")
driver.find_element_by_name("commit").click()

# 跳转到目标页面
driver.get("https://app.hedgeye.com/feed_items/all?page=1&with_category=33-risk-ranges")

# 初始化空列表,用来存储所有行的数据
all_data = []

for tr in driver.find_elements_by_tag_name("tr"):
    data = tr.get_attribute("innerText")
    data2 = data.split()[-3:]  # 获取每行最后3个元素
    all_data.append(data2)  # 将当前行数据添加到列表中

# 循环结束后,将列表转为DataFrame
final_df = pd.DataFrame(all_data)
print(final_df)

driver.quit()

方法二:收集小DataFrame后合并

如果你更习惯用DataFrame的操作逻辑,也可以把每次生成的小DataFrame存入列表,最后用pd.concat合并:

import pandas as pd
import numpy as np
import requests
from csv import writer
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.keys import Keys

chrome_options = Options()
chrome_options.add_argument("--headless")
driver = webdriver.Chrome(ChromeDriverManager().install())

# 登录流程
url = 'https://accounts.hedgeye.com/users/sign_in'
driver.get(url)
username = driver.find_element_by_id("user_email")
password = driver.find_element_by_id("user_password")
username.send_keys("")
password.send_keys("")
driver.find_element_by_name("commit").click()

# 跳转到目标页面
driver.get("https://app.hedgeye.com/feed_items/all?page=1&with_category=33-risk-ranges")

# 初始化空列表,用来存储所有小DataFrame
df_list = []

for tr in driver.find_elements_by_tag_name("tr"):
    data = tr.get_attribute("innerText")
    data2 = data.split()[-3:]  # 获取每行最后3个元素
    df = pd.DataFrame(np.array(data2).reshape(-1, len(data2)))
    df_list.append(df)  # 将小DataFrame添加到列表中

# 合并所有小DataFrame,ignore_index=True重置索引避免重复
final_df = pd.concat(df_list, ignore_index=True)
print(final_df)

driver.quit()

小提示:

  • 方法一的效率更高,因为列表的append操作比多次创建DataFrame要快很多,数据量大的时候差异会更明显。
  • 记得检查data.split()[-3:]是否能稳定获取你需要的数据,如果有些行的元素不足3个,可能会得到不完整的结果,必要时可以加个判断逻辑哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:47:54