如何实现每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
相关产品推荐
相关产品推荐

