想做量化的朋友,都知道一个真理:公告是慢变量,券商新闻是快信号。 可是如何获取券商新闻呢? 金亥跃江 手把手教你爬取某券商新闻信息。 一定要仔细阅读完噢,保证你收获满满。
一、为什么要看新闻事件呢?
很多新手觉得“新闻没用,不如看K线”,不排除你是对的,但也可以听一听我的观点。 这三点,K线绝对是没有的。
1. 捕捉短线爆发机会,目标是涨停
短线量化的核心是“快、准、狠”,而券商新闻(如政策利好、板块催化、资金异动)往往能直接引爆相关标的,带来1-3天的爆发性行情。
比如:前几天某券商平台发布“新能源板块政策加码”新闻,相关龙头股当天即可拉升10%+,多个股涨停. 你想一想,你若能及时捕捉,就能快速买入,过几天随后卖出获利。
通过代码自动爬取券商新闻,结合AI进行解读相关的板块甚至是个股,能快速锁定“新闻催化+资金强势”的标的,大幅提升短线策略的命中率和盈利效率,避免错过转瞬即逝的机会。
2. 找到热门板块的概率大幅提高
券商新闻往往不只是影响单一股票,而是会带动整个相关板块上涨。比如:新闻提及“人工智能算力需求激增”,不仅直接利好算力龙头,还会扩散到芯片、服务器等相关板块,形成板块轮动行情。
这可比你从APP上直接看热门板块强得多噢。
3. 能实现自动化调用
手动刷券商新闻效率极低,且容易遗漏关键信息(毕竟每天有上百条财经新闻发布);而通过代码自动爬取、解析、AI解读,就可以实现“新闻异动→AI解读→策略调用→信号提醒”的全流程自动化,不用再花费大量时间刷新闻、盯盘了,
完全解放自己的眼睛和双手。
二、必不可少的 AiThsNewsVo 对象
核心实体类:AiThsNewsVo
作用:封装某券商券商新闻所有核心数据,是爬取、解析、传输、接口返回全流程的数据载体,字段与某券商接口返回数据一一对应,还包含AI短线机会解读的prompt模板,直接用于后续AI解读、策略筛选和接口调用。
@Datapublic 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 List<StockDto> stock; // 关联版块列表(嵌套对象,新闻关联的概念板块) private List<StockDto> bk; // 简短描述(新闻简短摘要,适配策略快速筛选) private String shortDesc; // 重要性标识(0-普通,1-重要,用于筛选核心新闻) private String importFlag; // 标签信息列表(嵌套对象,新闻标签详情,含评分) private List<TagInfo> 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/?page=1&tag=&track=website&pagesize=400";核心方法:aiThsNewsBusiness(获取某券商券商新闻数据)
作用:对外提供的核心入口,无需传入参数,调用后自动爬取某券商最新券商新闻,自动解析嵌套字段、填充AI解读模板,直接返回可用于策略和接口调用的AiThsNewsVo列表,适配自动化策略调用和接口部署。
public static final String NEW_URL = "https://news.10jqka.com.cn/tapp/news/push/stock/?page=1&tag=&track=website&pagesize=400";public static final String PROMPT = """ 请根据以下新闻,快速识别短线交易机会: 【新闻内容】:{digest} 请聚焦回答: 1. **消息性质**:是超预期、符合预期还是低于预期? 2. **首当其冲的标的**:最直接利好的股票是哪个(代码+名称)?为什么? 3. **板块扩散路径**:资金可能会接着炒作哪个相关概念板块?列出该板块的1-2只龙头股。 4. **市场情绪判断**:此消息对市场整体情绪是提振、压制还是中性? """;@Overridepublic List<AiThsNewsVo> aiThsNewsBusiness() { // 1. 配置请求头(关键!避免接口反爬,固定配置) Map<String, 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. 校验接口返回状态:code=200表示请求成功,否则返回空列表 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模板 List<AiThsNewsVo> 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"); List<StockDto> 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"); List<StockDto> 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"); List<AiThsNewsVo.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 OutputResult<List<AiThsNewsVo>> thsNewsList() { return OutputResult.buildSucc(aiThsNewsBusiness.aiThsNewsBusiness()); }调用效果:运行后会输出某券商最新的400条券商新闻,包含标题、摘要、发布时间、关联股票、关联板块、AI解读模板等核心信息,直接用于后续的AI解读和策略筛选,无需额外处理。
#金亥跃江 小程序里面 有这个功能,大家可以看一看具体的效果。


七、福利领取:券商新闻完整代码包免费送🎁
为了帮大家快速落地券商新闻爬取和接口部署,整理了本次第54篇的完整可运行代码包,包含所有代码片段、配置文件、调用示例,直接导入项目即可运行,无需二次开发、无需调试参数:
1. ① 核心实体类完整代码(AiThsNewsVo,直接复用,含嵌套类); 2. ② 核心爬取方法完整代码(aiThsNewsBusiness,逐行注释); 3. 后台私信我,回复 "进群", 拉你进群,解锁更多量化技术文章,免费解答和分享。
下一篇,我们将讲解一下 如何判断 一个股票在最近几个月内的最高拐点日期和最低拐点日期,即找到K线图里面的拐点数据信息。
文章仅供学习使用,千万不可应用于股市,避免对某券商产生服务器压力。
结尾互动
如果觉得这篇文章对你有帮助,别忘了点赞+在看+转发,让更多量化开发者少走弯路,一起完善自己的量化交易体系~ 关注我,持续解锁Java量化实战干货!🚀

研报速递
发表评论
发表评论: