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

如何使用Selenium遍历列表并将网页搜索结果存入DataFrame?

解决Selenium循环搜索结果存入DataFrame的问题

嘿,刚接触Python就能写出这样的代码已经很赞啦!咱们来一步步把你的代码改对,让每个搜索结果都能正确存入DataFrame里~

首先,先说说你现有代码里的几个小问题:

  • 没导入webdriver.Chrome,运行时会直接报错
  • 每次搜索完没清空搜索框,下次输入会把关键词叠加上(比如第一次输Commonwealth Bank,第二次会变成Commonwealth BankRio Tinto,肯定搜不对)
  • 每次循环都把df3重新赋值成单个元素的列表,之前的结果全被覆盖了,根本存不下多个公司的数据
  • 没处理页面加载等待,有时候页面还没加载完就去查找元素,会抛出找不到元素的错误

下面是修正后的完整代码,我会给你逐段解释:

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

url = 'https://au.finance.yahoo.com/australia/'
driver_path = 'chromedriver.exe'
# 初始化Chrome浏览器
browser = webdriver.Chrome(executable_path=driver_path)
browser.get(url)

# 等待搜索框加载完成(最多等10秒),避免刚打开页面就找不到元素
loop_search = WebDriverWait(browser, 10).until(
    EC.presence_of_element_located((By.ID, 'yfin-usr-qry'))
)

search_companies = ['Commonwealth Bank','Rio Tinto','Wesfarmers']
# 初始化一个空列表,用来累积所有公司的搜索结果
results = []

for company in search_companies:
    # 每次搜索前清空搜索框,防止关键词叠加
    loop_search.clear()
    # 输入当前要搜索的公司名称
    loop_search.send_keys(company)
    # 等待搜索按钮可点击后再点击,避免按钮还没加载好就点不动
    search_button = WebDriverWait(browser, 10).until(
        EC.element_to_be_clickable((By.ID, 'search-button'))
    )
    search_button.click()
    
    # 等待目标信息区域加载完成,再提取文本
    comp_info = WebDriverWait(browser, 10).until(
        EC.presence_of_element_located((By.ID, 'quote-header-info'))
    ).text
    
    # 把公司名称和对应的信息以字典形式加入结果列表,这样转DataFrame时列名更清晰
    results.append({'公司名称': company, '详情信息': comp_info})

# 将结果列表转换成DataFrame
df3 = pd.DataFrame(results)
# 打印看看结果
print(df3)

# 最后记得关闭浏览器,释放资源
browser.quit()

关键改进点说明:

  1. 等待机制:用WebDriverWait配合expected_conditions,确保元素加载完成后再操作,解决页面加载慢导致的元素找不到问题
  2. 清空搜索框:每次循环前调用loop_search.clear(),避免关键词叠加
  3. 结果累积:用空列表results来存储每个公司的信息,而不是每次覆盖变量
  4. 结构化存储:用字典存储每个公司的名称和信息,转成DataFrame后会自动生成对应的列,方便后续处理

如果quote-header-info里的信息太杂,你还可以进一步拆分文本,提取具体数据(比如股票代码、当前股价等),比如用字符串的split()方法来分割内容,这部分可以根据你的需求调整~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:18:14