影刀RPA新手教程:股票数据自动化完全指南——实时行情采集K线数据保存与异动提醒
作者:林焱
案例主线:老张的股票数据全自动监控
老张是业余股票投资者,每天要手动查看50只自选股的实时行情,记录K线数据到Excel,并设置价格异动提醒。人工操作每天耗时3小时以上,且经常因为工作忙碌错过最佳买卖点。本教程用影刀RPA搭建股票数据全自动监控系统。
一、认识影刀与安装配置
影刀RPA是零代码自动化工具,支持网页自动化、桌面软件自动化、Excel处理、HTTP请求等核心能力,特别适合股票数据抓取和监控这类需要定时执行的场景。
股票数据来源环境准备
股票数据可以通过多个渠道获取:
- 东方财富网:免费、数据全面、更新快,适合国内A股
- 同花顺网页版:数据准确、支持实时行情
- 新浪财经:API接口简单、易于抓取
- 雪球网:社区数据丰富、适合基本面分析
本教程以东方财富网为主要数据源,在Chrome浏览器中操作。在影刀设置中,将默认浏览器设置为Chrome,并开启"自动携带登录态"选项。
安装配置要点
下载影刀安装包,安装路径必须为纯英文,例如D:\StockRPA\。安装完成后重启电脑,确保浏览器插件正确加载。首次打开影刀时,按照向导完成设备激活和账号登录。
二、元素定位四合一
股票网站通常使用传统Java或PHP架构,元素ID相对稳定,但仍需四种定位方式组合使用。
1. 智能匹配
东方财富网的自选股列表中的股票名称、价格等元素相对稳定,优先使用智能匹配。捕获后无需特殊设置,东方财富网的元素ID不会频繁变化。
2. XPath定位
股票列表中的行数据可以使用XPath按位置定位:
//table[@id='table_wrapper-table']//tr[1]//td[2]东方财富网常用XPath语法:
//input[@id='search-input']按ID定位搜索框//table[@id='table_wrapper-table']//tr定位表格所有行//span[@class='stock-price']按类名定位股票价格//a[contains(text(),'加入自选')]按文字定位按钮
3. CSS选择器
东方财富网的CSS类名相对稳定,使用CSS选择器是最优选择:
#search-input/* 搜索输入框 */.table-wrapper-table tr/* 股票列表行 */.stock-price/* 股票价格 */.rise/* 涨 */.fall/* 跌 */4. 图像识别
股票网站的"加入自选"、"查看K线"等图标按钮可能没有文字标识,使用图像识别。截取按钮截图,使用"点击图像"指令,设置相似度0.85。
实战:定位股票价格元素
东方财富网的股票价格在<span class="stock-price rise">或<span class="stock-price fall">标签中。正确做法是:使用//span[contains(@class,'stock-price')]定位价格元素,然后获取其文本内容。
三、变量与数据类型
老张的股票数据需要存储在本地Excel表中,并用变量在流程中传递和处理。
数据表结构
使用"启动Excel"指令打开股票数据表,字段包括:股票代码、股票名称、当前价格、涨跌幅、成交量、成交额、市盈率、市净率、更新时间。使用"读取Excel内容"指令读取A2到J500区域,保存为数据表变量stock_table。
字典变量应用
每只股票的基础信息用字典存储:
店群矩阵自动化突破运营极限!
股票基础信息 = { "代码": "600519", "名称": "贵州茅台", "所属板块": "白酒", "成本价": 1850.00, "持有数量": 100 }使用"在字典中设置"和"从字典中获取"指令操作字典变量。
列表变量应用
需要批量监控多只股票时,使用列表存储股票代码。使用"在列表中添加"指令,将每只股票的代码依次加入列表变量stock_code_list。
四、流程控制
条件判断
股票价格异动需要根据涨跌幅判断。使用"如果…否则"指令:
如果 涨跌幅 >= 5 执行:发送"大涨提醒"通知 否则如果 涨跌幅 <= -5 执行:发送"大跌提醒"通知 否则如果 涨跌幅 >= 3 或 涨跌幅 <= -3 执行:发送"明显波动提醒"通知 否则 执行:不发送通知,继续监控 结束如果循环遍历
需要监控多只自选股。使用"循环Excel内容"指令遍历自选股列表,对每只股票执行:获取实时行情、与成本价比较、判断是否需要提醒。
异常捕获
整个数据抓取流程使用"尝试捕获错误"指令包裹。如果某只股票数据抓取失败(如停牌、退市),捕获错误后记录失败原因到日志表,继续处理下一只股票。
五、网页自动化——实时行情采集
登录态管理
东方财富网的大部分数据不需要登录即可查看,但自选股管理和高级数据需要登录。使用"获取浏览器Cookie"指令,将Cookie保存为JSON格式到本地文件:C:\yingdao_workspace\stock\cookies.json。每次运行前用"设置浏览器Cookie"指令注入。
实时行情抓取
进入东方财富网自选股页面(或单个股票页面)。使用"循环网页相似元素"指令,遍历股票列表中的每一行。对每只股票,使用"获取网页元素内容"指令读取:股票代码、股票名称、当前价格、涨跌幅、成交量、成交额。
数据写入Excel
将抓取到的实时行情数据写入本地Excel表。使用"写入Excel内容"指令,在行情数据表的末尾追加行。字段包括:抓取时间、股票代码、股票名称、当前价格、涨跌幅、成交量、成交额、市盈率。
六、数据处理
K线数据保存
K线数据(开盘价、收盘价、最高价、最低价、成交量)需要按日期保存。使用"发送HTTP请求"指令调用东方财富网的K线数据API:
GET https://push2his.eastmoney.com/api/qt/stock/kline/get?secid=1.600519&fields1=f1,f2,f3,f4,f5,f6&fields2=f51,f52,f53,f54,f55,f56,f57,f58&klt=101&fqt=1&beg=20240101&end=20241231解析返回的JSON数据,提取K线数据并写入Excel。
涨跌幅计算
使用"计算表达式"指令,计算涨跌额和涨跌幅:
涨跌额 = 当前价格 - 昨收价格 涨跌幅 = (涨跌额 / 昨收价格) * 100计算结果使用"四舍五入"指令保留2位小数,并添加"%"符号。
异动判断
使用"如果…否则"指令判断是否需要发送异动提醒:
如果 (当前价格 - 成本价) / 成本价 >= 0.1 执行:发送"盈利10%提醒"通知 否则如果 (当前价格 - 成本价) / 成本价 <= -0.05 执行:发送"亏损5%提醒"通知 否则如果 涨跌幅 >= 5 执行:发送"单日大涨提醒"通知 否则如果 涨跌幅 <= -5 执行:发送"单日大跌提醒"通知 结束如果七、鼠标键盘图像自动化
处理股票网站弹窗
东方财富网偶尔弹出"关注我们"、"下载APP"等营销弹窗。使用"按键盘按键"指令发送Esc键关闭弹窗。在关键操作前先发送一次Esc。
鼠标滚轮操作
股票列表较长时需要滚动加载更多。使用"执行JavaScript"指令执行滚动:
function(element,input){window.scrollTo(0,document.body.scrollHeight);return"滚动完成";}截图取证
股票价格出现异动时,使用"网页截图"指令截取股票行情页面,保存为PNG文件,命名格式:股票代码_异动类型_时间戳.png。截图保存在C:\yingdao_workspace\stock\screenshots\目录下。
八、进阶技能
定时监控
老张希望每5分钟自动监控一次自选股行情。在影刀"计划任务"中新建定时任务,触发方式选择"按间隔执行",间隔设置为5分钟。
多市场监控
如果同时监控A股、港股、美股,需要管理多个数据源。在Excel配置表中添加"市场名称"和"数据源URL"两列,循环中根据当前行读取对应URL并抓取数据。
企业微信通知
股票价格异动时,使用"发送企业微信消息"指令,向老张发送异动提醒。消息内容包含:股票名称、当前价格、涨跌幅、异动类型、建议操作(买入/卖出/持有)。
九、平台实战——K线数据保存
K线数据API调用
使用"发送HTTP请求"指令调用东方财富网的K线数据API。请求示例:
GET https://push2his.eastmoney.com/api/qt/stock/kline/get Query Parameters: secid: 1.600519 (1代表深圳,0代表上海) fields1: f1,f2,f3,f4,f5,f6 fields2: f51,f52,f53,f54,f55,f56,f57,f58 klt: 101 (101=日K,102=周K,103=月K) fqt: 1 (是否复权,1=前复权,2=后复权) beg: 20240101 (开始日期) end: 20241231 (结束日期)JSON数据解析
API返回的数据是JSON格式。使用"解析JSON"指令将响应解析为字典。K线数据在data.klines字段中,是字符串数组,每个元素格式为:日期,开盘,收盘,最高,最低,成交量,成交额,振幅。
使用"Python脚本"指令解析K线数据:
defparse_kline_data(klines):""" 解析东方财富网K线数据 klines: 字符串数组,每个元素格式为"日期,开盘,收盘,最高,最低,成交量,成交额,振幅" """importdatetime result=[]forlineinklines:parts=line.split(',')iflen(parts)>=7:kline={"日期":parts[0],"开盘":float(parts[1]),"收盘":float(parts[2]),"最高":float(parts[3]),"最低":float(parts[4]),"成交量":int(parts[5]),"成交额":float(parts[6]),}# 计算涨跌幅iflen(result)>0:prev_close=result[-1]["收盘"]kline["涨跌幅"]=round((kline["收盘"]-prev_close)/prev_close*100,2)else:kline["涨跌幅"]=0.0result.append(kline)returnresultExcel保存
将解析后的K线数据写入Excel。使用"写入Excel内容"指令,在K线数据表中追加多行。字段包括:日期、开盘价、收盘价、最高价、最低价、成交量、成交额、涨跌幅。
十、系统联动
Excel数据分析
每日收盘后,使用"Python脚本"指令执行数据分析:
importpandasaspddefanalyze_stock_data(kline_data):""" 分析K线数据,计算技术指标 """df=pd.DataFrame(kline_data)df['日期']=pd.to_datetime(df['日期'])df=df.sort_values('日期')# 计算5日均线df['MA5']=df['收盘'].rolling(window=5).mean()# 计算10日均线df['MA10']=df['收盘'].rolling(window=10).mean()# 计算20日均线df['MA20']=df['收盘'].rolling(window=20).mean()# 计算MACD指标(简化版)df['EMA12']=df['收盘'].ewm(span=12).mean()df['EMA26']=df['收盘'].ewm(span=26).mean()df['DIF']=df['EMA12']-df['EMA26']df['DEA']=df['DIF'].ewm(span=9).mean()df['MACD']=(df['DIF']-df['DEA'])*2returndf.to_dict('records')邮件推送
每日收盘后,使用"发送邮件"指令将当日行情汇总和K线数据分析报告作为附件发送给老张。邮件主题格式:【股票日报】YYYY年MM月DD日,正文简要说明:监控股票数量、异动股票数量、建议关注的股票列表。
飞书多维表格同步
如果团队共享股票研究数据,可以将股票数据同步到飞书多维表格。使用影刀的飞书多维表格指令,在数据表中追加记录,字段包含:日期、股票代码、股票名称、收盘价、涨跌幅、成交量、MA5、MA10、MACD。
十一、工程化与规范
temu店群自动化报活动案例
应用结构规范
规范的应用结构:配置区(读取配置、校验必要参数)、初始化区(启动浏览器、设置超时时间)、主流程区(行情抓取、K线数据保存、异动判断)、异常处理区(错误捕获与记录)、收尾区(生成报表、发送通知、关闭浏览器)。
用"注释"指令在关键步骤前添加说明,格式为:【步骤N】操作说明 - 预计耗时XX秒。
变量命名规范
- 全局变量前缀
g_:g_cookie_path、g_notify_threshold - 循环变量前缀
loop_:loop_stock_code、loop_kline - 临时变量小写下划线:
temp_price、temp_change_percent
配置外部化
股票代码列表、监控阈值、通知方式等配置信息存储在外部Excel配置表中,不硬编码在应用内。使用"读取Excel内容"指令从配置表读取配置。
配置表示例(C:\yingdao_workspace\stock\config.xlsx):
| 配置项 | 配置值 | 说明 |
|---|---|---|
| 监控间隔(分钟) | 5 | 每5分钟监控一次 |
| 大涨提醒阈值(%) | 5 | 单日涨幅超过5%时提醒 |
| 大跌提醒阈值(%) | -5 | 单日跌幅超过-5%时提醒 |
| 盈利提醒阈值(%) | 10 | 盈利超过10%时提醒 |
| 亏损提醒阈值(%) | -5 | 亏损超过-5%时提醒 |
| 通知方式 | 企业微信 | 支持:企业微信、邮件、钉钉 |
| 数据源 | 东方财富网 | 支持:东方财富、同花顺、新浪财经 |
运行日志
使用"写入日志"指令记录关键操作。日志文件按日期命名,保存在C:\yingdao_logs\stock\目录下。
日志格式示例:
[2025-01-15 09:30:15] [INFO] 定时任务启动,开始监控自选股行情 [2025-01-15 09:30:16] [INFO] 本次监控股票数量:50只 [2025-01-15 09:30:45] [WARN] 股票"600519 贵州茅台"数据抓取失败,已记录到失败清单 [2025-01-15 09:31:22] [INFO] 成功抓取49只股票行情数据 [2025-01-15 09:31:30] [INFO] 发现3只股票异动:600519(涨+5.2%)、000001(跌-6.1%)、600036(涨+7.8%) [2025-01-15 09:31:35] [INFO] 异动提醒已发送到企业微信 [2025-01-15 09:31:40] [INFO] 本次监控任务完成,耗时25秒十二、速查表与常见报错
常见报错速查
| 报错信息 | 可能原因 | 解决方法 |
|---|---|---|
TimeoutException: Message: timeout | 页面加载超时(股票网站服务器响应慢或网络问题) | 增加"等待元素出现"的超时时间至30秒;检查网络连接;避开股市开盘和收盘的流量高峰时段(9:30-10:00、14:30-15:00) |
ElementNotInteractableException | 元素被遮挡(弹窗、遮罩层、广告) | 先按Esc关闭弹窗;使用"等待元素可见"指令等待元素进入视口;检查是否有iframe嵌套 |
StaleElementReferenceException | 页面刷新导致元素失效 | 在循环内重新获取元素后再操作;使用For次数循环代替相似元素循环 |
Cookie失效 | 登录态过期(通常7天后) | 重新手动登录东方财富网,使用"获取浏览器Cookie"指令更新Cookie文件 |
API调用失败 | API接口变更或请求参数错误 | 检查API请求URL和参数是否正确;查看东方财富网官方文档或开发者工具中的网络请求 |
数据解析失败 | API返回的数据格式变更 | 使用"调试变量"面板查看API返回的原始数据,调整解析逻辑 |
发送通知失败 | 企业微信Webhook失效或网络问题 | 检查企业微信机器人Webhook地址是否正确;重新获取Webhook地址 |
Excel写入失败 | Excel文件被其他程序占用 | 确保Excel文件没有被手动打开;使用"关闭Excel"指令关闭所有Excel进程后再写入 |
股票网站元素定位速查
# 东方财富网 - 搜索框 //input[@id='search-input'] # 东方财富网 - 自选股列表行 //table[@id='table_wrapper-table']//tr # 东方财富网 - 股票价格 //span[contains(@class,'stock-price')] # 东方财富网 - 涨跌幅 //span[contains(@class,'rise') or contains(@class,'fall')] # 同花顺 - 股票搜索框 //input[@id='searchBox'] # 新浪财经 - 股票价格 //div[@id='price']/* 东方财富网常用样式 */#search-input/* 搜索输入框 */.table-wrapper-table tr/* 自选股列表行 */.stock-price/* 股票价格 */.rise/* 涨 */.fall/* 跌 */.stock-name/* 股票名称 *//* 同花顺常用样式 */#searchBox/* 搜索框 */.stock-item/* 股票项 */.price-now/* 当前价格 */股票数据API调用示例
# 1. 东方财富网 - 实时行情(单个股票) GET https://push2.eastmoney.com/api/qt/stock/get?secid=1.600519&fields=f43,f44,f45,f46,f47,f48,f49,f50,f51,f52,f57,f58,f84,f85,f86,f168,f169,f170,f171 # 2. 东方财富网 - K线数据(日K) GET https://push2his.eastmoney.com/api/qt/stock/kline/get?secid=1.600519&fields1=f1,f2,f3,f4,f5,f6&fields2=f51,f52,f53,f54,f55,f56,f57,f58&klt=101&fqt=1&beg=20240101&end=20241231 # 3. 新浪财经 - 实时行情(多个股票,逗号分隔) GET https://hq.sinajs.cn/list=sh600519,sz000001 # 4. 腾讯财经 - 实时行情 GET https://qt.gtimg.cn/q=sh600519Python股票数据分析脚本汇总
# 1. 计算移动平均线(MA)defcalculate_ma(prices,window=5):""" 计算移动平均线 prices: 价格列表(按时间顺序) window: 窗口大小(如5日、10日、20日) """importpandasaspd series=pd.Series(prices)ma=series.rolling(window=window).mean().tolist()returnma# 2. 计算MACD指标defcalculate_macd(prices,fast=12,slow=26,signal=9):""" 计算MACD指标 """importpandasaspd series=pd.Series(prices)ema_fast=series.ewm(span=fast).mean()ema_slow=series.ewm(span=slow).mean()dif=ema_fast-ema_slow dea=dif.ewm(span=signal).mean()macd=(dif-dea)*2return{"DIF":dif.tolist(),"DEA":dea.tolist(),"MACD":macd.tolist()}# 3. 计算KDJ指标defcalculate_kdj(high,low,close,n=9):""" 计算KDJ指标 """importpandasaspdimportnumpyasnp high=pd.Series(high)low=pd.Series(low)close=pd.Series(close)lowest=low.rolling(window=n).min()highest=high.rolling(window=n).max()rsv=(close-lowest)/(highest-lowest)*100k=rsv.ewm(com=2).mean()d=k.ewm(com=2).mean()j=3*k-2*dreturn{"K":k.tolist(),"D":d.tolist(),"J":j.tolist()}# 4. 计算RSI指标defcalculate_rsi(prices,period=14):""" 计算RSI指标 """importpandasaspdimportnumpyasnp series=pd.Series(prices)delta=series.diff()gain=delta.where(delta>0,0)loss=-delta.where(delta<0,0)avg_gain=gain.rolling(window=period).mean()avg_loss=loss.rolling(window=period).mean()rs=avg_gain/avg_loss rsi=100-(100/(1+rs))returnrsi.tolist()# 5. 判断金叉/死叉defcheck_golden_death_cross(ma_short,ma_long):""" 判断均线金叉(买入信号)或死叉(卖出信号) ma_short: 短期均线(如MA5) ma_long: 长期均线(如MA20) 返回:1=金叉,-1=死叉,0=无信号 """iflen(ma_short)<2orlen(ma_long)<2:return0# 前一天:短期均线 <= 长期均线;今天:短期均线 > 长期均线 => 金叉ifma_short[-2]<=ma_long[-2]andma_short[-1]>ma_long[-1]:return1# 金叉# 前一天:短期均线 >= 长期均线;今天:短期均线 < 长期均线 => 死叉ifma_short[-2]>=ma_long[-2]andma_short[-1]<ma_long[-1]:return-1# 死叉return0# 无信号调试技巧
股票数据抓取涉及实时数据,调试时建议:不要在股市交易时段(9:30-15:00)进行调试,因为实时数据不断变化,可能导致调试结果不稳定。
调试技巧:
- 在抓取数据前打断点,确认股票代码列表正确
- 在解析数据前打断点,确认API返回的数据格式正确
- 在写入Excel前打断点,确认解析后的数据正确
- 使用"调试变量"面板查看每次循环中的股票数据,确认无异常值
- 如果必须使用断点调试循环内部,设置一个"调试模式"全局变量,只有在调试模式下才暂停
总结
通过本文搭建的股票数据全自动监控系统,老张每天3小时的人工监控工作压缩到0(全自动运行),只有在收到异动提醒时才需要人工判断是否操作。
系统自动完成:实时行情采集(每5分钟)、K线数据保存(每日收盘后)、异动提醒(实时)、技术指标计算(每日收盘后)、数据分析报告生成与推送(每日收盘后)。
重要提醒:
- 股票投资有风险,自动化工具仅供参考,不构成投资建议
- 不要完全依赖自动化工具进行投资决策,需要结合基本面、政策面、资金面等多方面因素综合判断
- 定期检查自动化系统的运行日志,确保数据准确性
- 遵守各大数据源的使用条款,不要频繁请求导致IP被封
影刀RPA让普通投资者也能拥有机构级的自动化监控能力,把宝贵的时间用在有价值的分析和决策上。
#影刀RPA #RPA教程 #股票数据 #自动化监控 #K线数据
作者:林焱