
想做量化的朋友都知道一个真理公告是慢变量券商新闻是快信号。 可是如何获取券商新闻呢? 金亥跃江 手把手教你爬取某券商新闻信息。 一定要仔细阅读完噢保证你收获满满。一、为什么要看新闻事件呢?很多新手觉得“新闻没用不如看K线”不排除你是对的但也可以听一听我的观点。 这三点K线绝对是没有的。1. 捕捉短线爆发机会目标是涨停短线量化的核心是“快、准、狠”而券商新闻如政策利好、板块催化、资金异动往往能直接引爆相关标的带来1-3天的爆发性行情。比如前几天某券商平台发布“新能源板块政策加码”新闻相关龙头股当天即可拉升10%多个股涨停. 你想一想你若能及时捕捉就能快速买入过几天随后卖出获利。通过代码自动爬取券商新闻结合AI进行解读相关的板块甚至是个股能快速锁定“新闻催化资金强势”的标的大幅提升短线策略的命中率和盈利效率避免错过转瞬即逝的机会。2. 找到热门板块的概率大幅提高券商新闻往往不只是影响单一股票而是会带动整个相关板块上涨。比如新闻提及“人工智能算力需求激增”不仅直接利好算力龙头还会扩散到芯片、服务器等相关板块形成板块轮动行情。这可比你从APP上直接看热门板块强得多噢。3. 能实现自动化调用手动刷券商新闻效率极低且容易遗漏关键信息毕竟每天有上百条财经新闻发布而通过代码自动爬取、解析、AI解读就可以实现“新闻异动→AI解读→策略调用→信号提醒”的全流程自动化不用再花费大量时间刷新闻、盯盘了完全解放自己的眼睛和双手。二、必不可少的 AiThsNewsVo 对象核心实体类AiThsNewsVo作用封装某券商券商新闻所有核心数据是爬取、解析、传输、接口返回全流程的数据载体字段与某券商接口返回数据一一对应还包含AI短线机会解读的prompt模板直接用于后续AI解读、策略筛选和接口调用。Data public class AiThsNewsVo implements Serializable { // AI解读 prompt短线机会解读模板 private String prompt; // 主键ID新闻唯一标识 private String id; // 序列值排序用 private String seq; // 事件标题新闻标题核心用于快速识别 private String title; // 事件摘要新闻核心内容用于AI解读 private String digest; // 网页链接新闻详情页链接 private String url; // APP链接某券商APP内新闻链接 private String appUrl; // 分享链接新闻分享链接 private String shareUrl; // 颜色标识1-默认无需修改 private String color; // 标签字符串逗号分隔如“新能源,政策利好” private String tag; // 创建时间戳秒新闻发布时间 private String ctime; // 更新时间戳秒新闻更新时间 private String rtime; // 数据来源固定为“某券商”无需手动设置 private String source 某券商; // 图片链接新闻配图链接 private String picUrl; // 性质标识0-默认无需修改 private String nature; // 关联股票列表嵌套对象新闻直接关联的股票 private ListStockDto stock; // 关联版块列表嵌套对象新闻关联的概念板块 private ListStockDto bk; // 简短描述新闻简短摘要适配策略快速筛选 private String shortDesc; // 重要性标识0-普通1-重要用于筛选核心新闻 private String importFlag; // 标签信息列表嵌套对象新闻标签详情含评分 private ListTagInfo tagInfo; // 嵌套类标签信息实体tagInfo字段存储标签详情 Data public static class TagInfo { private String id; // 标签ID private String name; // 标签名称如“政策利好”“算力” private Double score; // 标签关联度评分越高越相关 private String type; // 标签类型无需修改 } }① 字段设计覆盖“新闻基础信息关联标的股票板块AI解读模板标签信息”无冗余字段适配某券商接口返回的所有核心数据尤其是嵌套字段stock、bk、tagInfo已完整封装无需额外解析② 核心亮点prompt字段内置AI短线机会解读模板只需替换{digest}占位符就能直接调用AI接口解读新闻的短线价值无需额外编写解读逻辑source字段固定为“某券商”无需手动赋值三、手把手讲解券商新闻爬取全流程先明确核心逻辑调用某券商新闻接口→配置请求头反爬→解析返回的JSON数据→提取核心字段→处理嵌套对象关联股票、板块、标签→填充AI解读模板→封装为AiThsNewsVo列表→返回结果形成完整闭环直接调用即可获取最新券商新闻数据还可通过Controller部署为接口。先看1个核心接口某券商新闻接口直接复用爬取券商新闻数据的核心是某券商官方新闻接口已在代码中定义好直接复用即可无需修改接口地址适配最新接口格式避免反爬稳定性拉满每页可获取400条新闻满足量化策略批量筛选需求。// 某券商券商新闻接口获取最新股票相关新闻每页400条 public static final String NEW_URL https://news.10jqka.com.cn/tapp/news/push/stock/?page1tagtrackwebsitepagesize400;核心方法aiThsNewsBusiness获取某券商券商新闻数据作用对外提供的核心入口无需传入参数调用后自动爬取某券商最新券商新闻自动解析嵌套字段、填充AI解读模板直接返回可用于策略和接口调用的AiThsNewsVo列表适配自动化策略调用和接口部署。public static final String NEW_URL https://news.10jqka.com.cn/tapp/news/push/stock/?page1tagtrackwebsitepagesize400; public static final String PROMPT 请根据以下新闻快速识别短线交易机会 【新闻内容】{digest} 请聚焦回答 1. **消息性质**是超预期、符合预期还是低于预期 2. **首当其冲的标的**最直接利好的股票是哪个代码名称为什么 3. **板块扩散路径**资金可能会接着炒作哪个相关概念板块列出该板块的1-2只龙头股。 4. **市场情绪判断**此消息对市场整体情绪是提振、压制还是中性 ; Override public ListAiThsNewsVo aiThsNewsBusiness() { // 1. 配置请求头关键避免接口反爬固定配置 MapString, String header new HashMap(); header.put(:authority, news.10jqka.com.cn); // 主机权限标识固定不可修改 try { // 2. 发送GET请求复用反爬配置避免IP封禁复用前53篇的HttpClient配置 String thsNewContent HttpUtil.sendGet(HttpClientConfig.proxyNoUseCloseableHttpClient(), NEW_URL, header, utf-8); // 3. 解析返回的JSON数据接口返回JSON格式包含code和data字段 JSONObject jsonObject JSONUtil.parseObj(thsNewContent); // 4. 校验接口返回状态code200表示请求成功否则返回空列表 if (!200.equals(jsonObject.getStr(code))) { return new ArrayList(); } // 5. 获取核心新闻列表data.list字段包含所有新闻数据 JSONArray jsonArray jsonObject.getJSONObject(data).getJSONArray(list); if (CollUtil.isEmpty(jsonArray)) { return new ArrayList(); // 无新闻数据返回空列表 } // 6. 封装新闻数据处理嵌套字段填充AI模板 ListAiThsNewsVo resultList new ArrayList(); // 7. 遍历新闻列表逐一封装为AiThsNewsVo jsonArray.forEach( n - { JSONObject tempObject (JSONObject) n; AiThsNewsVo aiThsNewsVo new AiThsNewsVo(); // 基础字段赋值与接口返回字段一一对应 aiThsNewsVo.setId(tempObject.getStr(id)); // 新闻ID aiThsNewsVo.setSeq(tempObject.getStr(seq)); // 序列值 aiThsNewsVo.setTitle(tempObject.getStr(title)); // 新闻标题 aiThsNewsVo.setDigest(tempObject.getStr(digest)); // 新闻摘要核心用于AI解读 // 填充AI短线解读模板替换{digest}占位符后续可直接调用AI接口 aiThsNewsVo.setPrompt(PROMPT.replace({digest}, aiThsNewsVo.getDigest())); aiThsNewsVo.setUrl(tempObject.getStr(url)); // 网页链接 aiThsNewsVo.setAppUrl(tempObject.getStr(appUrl)); // APP链接 aiThsNewsVo.setShareUrl(tempObject.getStr(shareUrl)); // 分享链接 aiThsNewsVo.setColor(tempObject.getStr(color)); // 颜色标识 aiThsNewsVo.setTag(tempObject.getStr(tag)); // 标签字符串逗号分隔 // 时间戳转换接口返回秒级时间戳转换为指定日期格式适配策略筛选 aiThsNewsVo.setCtime(DateUtil.format(new Date(Long.valueOf(tempObject.getStr(ctime)) * 1000), Const.DATE_FORMAT)); aiThsNewsVo.setRtime(aiThsNewsVo.getCtime()); // 更新时间默认与创建时间一致 aiThsNewsVo.setSource(某券商新闻); // 数据来源固定 aiThsNewsVo.setPicUrl(tempObject.getStr(picUrl)); // 图片链接 aiThsNewsVo.setNature(tempObject.getStr(nature)); // 性质标识 aiThsNewsVo.setShortDesc(tempObject.getStr(short)); // 简短描述 aiThsNewsVo.setImportFlag(tempObject.getStr(import)); // 重要性标识 // 8. 处理嵌套字段关联股票列表stock字段 JSONArray stockArray tempObject.getJSONArray(stock); ListStockDto stockDtoList new ArrayList(); if (CollUtil.isNotEmpty(stockArray)) { stockArray.forEach( n2 - { JSONObject tempObject2 (JSONObject) n2; StockDto stockDto new StockDto(); stockDto.setCode(tempObject2.getStr(stockCode)); // 股票编码 stockDto.setName(tempObject2.getStr(name)); // 股票名称 stockDtoList.add(stockDto); } ); } aiThsNewsVo.setStock(stockDtoList); // 赋值关联股票列表 // 9. 处理嵌套字段关联版块列表bk字段接口返回字段为field需映射为bk JSONArray fieldArray tempObject.getJSONArray(field); ListStockDto fieldDtoList new ArrayList(); if (CollUtil.isNotEmpty(fieldArray)) { fieldArray.forEach( n2 - { JSONObject tempObject2 (JSONObject) n2; StockDto stockDto new StockDto(); stockDto.setCode(tempObject2.getStr(stockCode)); // 板块编码 stockDto.setName(tempObject2.getStr(name)); // 板块名称 fieldDtoList.add(stockDto); } ); } aiThsNewsVo.setBk(fieldDtoList); // 赋值关联版块列表 // 10. 处理嵌套字段标签信息列表tagInfo字段 JSONArray tagInfoArray tempObject.getJSONArray(tagInfo); ListAiThsNewsVo.TagInfo tagInfoList new ArrayList(); if (CollUtil.isNotEmpty(tagInfoArray)) { tagInfoArray.forEach( n2 - { JSONObject tempObject2 (JSONObject) n2; AiThsNewsVo.TagInfo tagInfo new AiThsNewsVo.TagInfo(); tagInfo.setId(tempObject2.getStr(id)); // 标签ID tagInfo.setName(tempObject2.getStr(name)); // 标签名称 tagInfo.setScore(tempObject2.getDouble(score)); // 标签关联度评分 tagInfo.setType(tempObject2.getStr(type)); // 标签类型 tagInfoList.add(tagInfo); } ); } aiThsNewsVo.setTagInfo(tagInfoList); // 赋值标签信息列表 resultList.add(aiThsNewsVo); // 添加到结果列表 } ); return resultList; // 返回封装好的新闻列表 } catch (Exception e) { // 异常兜底爬取失败时返回空列表避免影响策略和接口整体流程 log.error(获取某券商券商新闻数据失败, e); return new ArrayList(); } }方法调用示例PostMapping(/thsNewsList) StockLog(enabled false) public OutputResultListAiThsNewsVo thsNewsList() { return OutputResult.buildSucc(aiThsNewsBusiness.aiThsNewsBusiness()); }调用效果运行后会输出某券商最新的400条券商新闻包含标题、摘要、发布时间、关联股票、关联板块、AI解读模板等核心信息直接用于后续的AI解读和策略筛选无需额外处理。#金亥跃江 小程序里面 有这个功能大家可以看一看具体的效果。七、福利领取券商新闻完整代码包免费送为了帮大家快速落地券商新闻爬取和接口部署整理了本次第54篇的完整可运行代码包包含所有代码片段、配置文件、调用示例直接导入项目即可运行无需二次开发、无需调试参数1. ① 核心实体类完整代码AiThsNewsVo直接复用含嵌套类2. ② 核心爬取方法完整代码aiThsNewsBusiness逐行注释3. 后台私信我回复 “进群” 拉你进群解锁更多量化技术文章免费解答和分享。下一篇我们将讲解一下 如何判断 一个股票在最近几个月内的最高拐点日期和最低拐点日期即找到K线图里面的拐点数据信息。文章仅供学习使用千万不可应用于股市避免对某券商产生服务器压力。结尾互动如果觉得这篇文章对你有帮助别忘了点赞在看转发让更多量化开发者少走弯路一起完善自己的量化交易体系 关注我持续解锁Java量化实战干货#金亥跃江聊量化 #金亥跃江 #股票量化 #量化