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

如何实现每2分钟定时重复抓取多只股票价格?

问题分析与修复

原代码无法实现每2分钟自动重新抓取所有股票价格的核心问题有三点:

  • 主循环仅调用getData(item),但item是初始化循环的最后一个股票代码,只会重复抓取单只股票
  • stockdata仅在程序启动时填充一次,后续循环未更新数据,导出的始终是旧数据
  • 没有在循环中重新遍历所有股票,无法获取全量最新价格

以下是修正后的代码:

import requests
from bs4 import BeautifulSoup
import time
import pandas as pd

mystocks = ['GOOG', 'META', 'MSFT', 'PLTR', 'TSLA', 'ZS', 'PYPL', 'SHOP', 'TTCF']

def getData(symbol):
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36'}
    url = f'https://finance.yahoo.com/quote/{symbol}'
    r = requests.get(url, headers=headers)
    soup = BeautifulSoup(r.text, 'html.parser')    
    stock = {
        'symbol': symbol,
        'price': soup.find('div', {'class':'D(ib) Mend(20px)'}).find_all('fin-streamer')[0].text,
    }
    return stock

def export_data(stockdata):
    df = pd.DataFrame(stockdata)
    df.to_excel("LETS GO2.xlsx")

def fetch_all_stocks():
    stockdata = []
    for item in mystocks:
        stockdata.append(getData(item))
    return stockdata
        
if __name__ == '__main__':
    while True:
        # 重新抓取所有股票的最新数据
        latest_stock_data = fetch_all_stocks()
        export_data(latest_stock_data)
        print('已更新股票数据并导出')
        time_wait = 2
        print(f'等待 {time_wait} 分钟后重新抓取...')
        time.sleep(time_wait * 60)

核心修改说明

  • 新增fetch_all_stocks函数,每次调用都会重新遍历所有股票代码,获取最新价格并返回全新的列表,避免旧数据堆积
  • 主循环中每次都调用fetch_all_stocks获取最新全量数据,再导出到Excel
  • 移除了全局的stockdata变量,改用局部变量存储每次的最新数据,避免数据污染

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 21:05:26