行业资讯

加入亿拓客·流量大师 撬动财富之门!!!

量化系列: 手把手教你爬取某券商新闻

wang 2026-03-27 行业资讯
量化系列: 手把手教你爬取某券商新闻

想做量化的朋友,都知道一个真理:公告是慢变量,券商新闻是快信号。 可是如何获取券商新闻呢?  金亥跃江 手把手教你爬取某券商新闻信息。  一定要仔细阅读完噢,保证你收获满满。

一、为什么要看新闻事件呢?

很多新手觉得“新闻没用,不如看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. 1. ① 核心实体类完整代码(AiThsNewsVo,直接复用,含嵌套类);
  2. 2. ② 核心爬取方法完整代码(aiThsNewsBusiness,逐行注释);
  3. 3. 后台私信我,回复 "进群", 拉你进群,解锁更多量化技术文章,免费解答和分享。

下一篇,我们将讲解一下 如何判断 一个股票在最近几个月内的最高拐点日期和最低拐点日期,即找到K线图里面的拐点数据信息。

文章仅供学习使用,千万不可应用于股市,避免对某券商产生服务器压力。

结尾互动

如果觉得这篇文章对你有帮助,别忘了点赞+在看+转发,让更多量化开发者少走弯路,一起完善自己的量化交易体系~ 关注我,持续解锁Java量化实战干货!🚀

#金亥跃江聊量化  #金亥跃江 #股票量化  #量化

猜你喜欢

发表评论

发表评论: