ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Java量化实战53篇|夯爆了!股票公告数据爬取全落地

Java量化实战53篇|夯爆了!股票公告数据爬取全落地 做股票的都懂一个真理主力可以骗人但公告不会。 可见学会爬取公告是多么一件重要的事情。 今天小亥就带着大家一起爬取股票的公告数据一定要仔细看完噢。股票公告是上市公司的“官方发声渠道”每一条公告都藏着股价涨跌的密码也是量化策略从“技术面”走向“基本面技术面”双驱动的关键一步。今天第53篇直接给大家上硬菜完整拆解股票公告数据爬取全流程, 大家轻轻松松获取到股票公告数据。注全文无敏感词、无违禁内容基于Java主流量化框架开发适配某交所最新接口给定URL直接复用兼容MySQL、MyBatis-Plus建议收藏转发避免后续找不到一. 股票公告很重要噢在讲解代码前大家要先有一个认识 为什么量化策略必须接入股票公告数据很多新手觉得“公告没用不如看K线”其实大错特错——公告是上市公司的“基本面说明书”核心价值有3点不管是短线还是长线策略都缺一不可1. 避免买到违规处罚股买股票最怕“黑天鹅”因为 突然的业绩亏损、监管处罚、债务违约都会导致股价暴跌直接让策略亏损离场。而公告会提前或及时披露这些负面信息通过代码自动爬取、筛选能快速剔除高风险标的从源头降低策略回撤。比如某股票发布“被立案调查”公告若能及时捕捉就能在股价下跌前清仓避免巨额亏损反之忽视公告只会被动踩雷。2. 提前买到好股利好公告如盈利增长、并购重组、分红、战略合作是股价上涨的核心驱动力之一尤其是突发利好往往能带来短期爆发性行情而持续的利好公告如连续盈利、产能扩张则能锁定长期优质标的。通过代码爬取公告结合AI大模型来自动判断利好利空就能自动筛选出“基本面异动资金面强势”的标的大幅提升策略的命中率和盈利空间。3. 实现“无人值守”手动翻公告效率极低且容易遗漏关键信息每天有上百条公告发布通过代码自动爬取、解析、判断能将公告数据嵌入自动化策略实现“公告异动→AI判断→自动筛选→信号提醒”的全流程自动化不用再熬夜翻公告、盯基本面。二、基础准备核心实体类公告数据封装载体核心实体类GongGaoVo公告信息封装作用封装股票公告所有核心数据是爬取、解析、传输全流程的数据载体字段与某交所接口返回数据一一对应。 小亥还还添加了 AI利好利空判断的prompt模板直接用于后续AI判断、策略筛选。Data Schema(description 公告信息) public class GongGaoVo implements Serializable { Schema(description Id信息) private String id; Schema(description 标题) private String title; Schema(description 关联Id) private String annId; Schema(description 路径公告PDF下载地址) private String attachPath; Schema(description 发布时间) private String publishTime; Schema(description 股票编码) private String secCode; Schema(description 股票名称) private String secName; Schema(description AI关键词利好利空判断模板) private String prompt; }三、核心拆解只有一个接口噢先明确核心逻辑传入股票编码→查询股票基本信息→封装接口参数日期范围、股票编码等→调用深交所公告接口→解析返回的JSON数据→去重处理→填充AI判断模板→返回公告列表形成完整闭环直接调用即可获取指定股票的公告数据。直接说 URL 接口// 深交所公告列表接口获取指定股票的公告数据 String url https://www.szse.cn/api/disc/announcement/annList?random0.4811020478561059;核心方法getByCode根据股票编码获取公告数据作用对外提供的核心入口传入股票编码如“000001”即可自动获取该股票近2个月的公告数据可修改日期范围自动去重、填充AI判断模板直接返回可用于策略的GongGaoVo列表适配自动化策略调用。/** * 根据股票编码获取该股票的公告数据近2个月 * param code 股票编码如300344 * return 公告列表GongGaoVo包含公告标题、发布时间、PDF地址、AI判断模板等 */ public ListGongGaoVo getByCode(String code) { // 1. 深交所公告接口直接复用无需修改 String url https://www.szse.cn/api/disc/announcement/annList?random0.4811020478561059; /** * 接口请求参数说明POST请求JSON格式 * seDate日期范围近2个月可修改 * stock股票编码传入的code * channelCode公告类型listedNotice_disc上市公司公告固定值 * pageSize每页条数50条可修改 * pageNum页码1第一页可扩展分页查询 */ // 2. 查询股票基本信息复用前序篇章的股票查询方法无则可自行实现 StockDto stockDto stockService.getByCodeOrNameOrFullCode(code); if (stockDto null) { return new ArrayList(); // 股票不存在返回空列表 } // 3. 封装接口请求参数 MapString, Object params new HashMap(); params.put(pageSize, 50); // 每页50条公告提升爬取效率 params.put(pageNum, 1); // 先获取第一页可扩展分页查询多页 params.put(stock, Collections.singleton(code)); // 股票编码单只股票 params.put(channelCode, Collections.singleton(listedNotice_disc)); // 公告类型固定 // 4. 封装日期范围近2个月可修改如offsetMonth(-6)即近6个月 ListString seDateList new ArrayList(); // 开始日期当前日期往前推2个月 seDateList.add(DateUtil.format(DateUtil.offsetMonth(new Date(), -2), Const.SIMPLE_DATE_FORMAT)); // 结束日期当前日期往后推1天避免遗漏当日公告 seDateList.add(DateUtil.format(DateUtil.offsetDay(new Date(), 1), Const.SIMPLE_DATE_FORMAT)); params.put(seDate, seDateList); // 5. 封装请求头关键避免接口反爬固定配置 MapString, String headerMap new HashMap(); headerMap.put(Host, www.szse.cn); // 主机地址固定 headerMap.put(Origin, https://www.szse.cn); // 来源地址固定 // 若爬取失败可添加User-Agent、Cookie复用前52篇的反爬请求头 // 6. AI利好利空判断模板核心无需修改直接复用 String prompt 你是一个专业的股票分析师擅长根据公告标题快速判断市场影响。你的任务是根据股票公告的标题判断该公告是利好还是利空。 **判断标准** - **利好**标题中包含正面消息可能推动股价上涨例如盈利增长、并购、新产品发布、分红、战略合作、政策支持等。 - **利空**标题中包含负面消息可能导致股价下跌例如亏损、诉讼、监管处罚、裁员、债务违约、市场风险警告等。 **输出要求** - 输出“利好”或“利空”并且给出详细的理由。 **示例** - 标题 公司2023年净利润同比增长30% 输出利好 - 标题 公司因环境污染被罚款100万元 输出利空 - 标题 公司与行业巨头达成战略合作 输出利好 - 标题 公司董事长涉嫌违法被调查 输出利空 现在请根据以下标题判断 标题: {title} ; try { // 7. 发送POST请求JSON格式复用反爬配置避免IP封禁 String content HttpUtil.sendPostJson(HttpClientConfig.proxyNoUseCloseableHttpClient(), url, params, headerMap); // 8. 解析返回的JSON数据 JSONObject jsonObject JSONUtil.parseObj(content); JSONArray jsonArray jsonObject.getJSONArray(data); // 核心公告列表字段 if (jsonArray.isEmpty()) { return new ArrayList(); // 无公告数据返回空列表 } // 9. 封装公告数据去重处理避免重复公告 ListGongGaoVo resultList new ArrayList(); ListString titleList new ArrayList(); // 用于去重根据公告标题 // 10. 遍历公告列表封装为GongGaoVo jsonArray.forEach( n - { JSONObject jsonObject1 (JSONObject) n; GongGaoVo gongGaoVo new GongGaoVo(); gongGaoVo.setId(jsonObject1.getStr(id)); // 公告ID gongGaoVo.setTitle(jsonObject1.getStr(title)); // 公告标题核心用于AI判断 // 去重避免同一标题的公告重复添加部分公告可能重复发布 if (!titleList.contains(gongGaoVo.getTitle())) { gongGaoVo.setAnnId(jsonObject1.getStr(annId)); // 公告关联ID // 拼接公告PDF下载地址接口返回的是相对路径需拼接绝对路径 gongGaoVo.setAttachPath(https://disc.static.szse.cn/download jsonObject1.getStr(attachPath)); gongGaoVo.setPublishTime(jsonObject1.getStr(publishTime)); // 发布时间 gongGaoVo.setSecCode(stockDto.getCode()); // 股票编码 gongGaoVo.setSecName(stockDto.getName()); // 股票名称 // 填充AI判断模板替换{title}占位符后续可直接调用AI接口判断 gongGaoVo.setPrompt(prompt.replace({title}, gongGaoVo.getTitle())); titleList.add(gongGaoVo.getTitle()); resultList.add(gongGaoVo); } } ); return resultList; // 返回去重后的公告列表 } catch (Exception e) { // 异常兜底爬取失败时返回空列表避免影响策略整体流程 log.error(获取股票{}公告数据失败, code, e); return new ArrayList(); } }小亥为大家提供了一个免费版本的在线公告查询页面 https://www.yueshushu.top/adminStockPage/gongGao.html 可以看一看实际的效果。下期预告下一篇第54篇我们将聚焦 新闻事件即实时获取新闻列表是消息面选股的绝配噢。文章仅供学习使用千万不可应用于股市避免对某券商产生服务器压力。结尾互动如果觉得这篇文章对你有帮助别忘了点赞在看转发让更多股票开发者少走弯路一起完善自己的股票交易体系 关注我持续解锁Java股票实战干货终于将 开盘啦 的常见数据接口 转换成了 Http 的形式 粉丝们如果有兴趣可以一块沟通沟通。自研炒股小程序夯爆了
返回列表