当前位置:首页>python>Python爬取巨潮资讯公告:监听new/disclosure,批量下载PDF与结构化数据(附源码)

Python爬取巨潮资讯公告:监听new/disclosure,批量下载PDF与结构化数据(附源码)

  • 2026-10-11 06:57:59
Python爬取巨潮资讯公告:监听new/disclosure,批量下载PDF与结构化数据(附源码)
做Python爬虫和量化投研的朋友,对巨潮资讯(CNINFO)一定不陌生。作为证监会指定的上市公司信息披露平台,这里是A股最权威的公告数据源:财报、重组、减持、股权激励、问询函……几乎所有影响股价的信息,都必须在这里披露。
但巨潮资讯的“技术门槛”也很高:
公告列表是接口驱动(new/disclosure),不是静态 HTML
发布时间是毫秒级时间戳
公告文件是PDF,且下载需要 Referer 校验
翻页是组件化按钮,不是传统 下一页
今天这篇,我基于DrissionPage监听公告接口,把公告ID、股票代码、公告标题、公告类型、发布时间、PDF下载地址等 11 个字段结构化落盘,并批量下载 PDF 到本地,自动去重。核心思路全讲,但PDF 下载失败重试、文件名校验、Referer 策略,我只给逻辑,不贴完整封装——毕竟能稳定跑一个月的投研脚本,和跑一次就炸的 Demo,完全是两个东西。

Python爬取巨潮资讯公告 · 核心逻辑拆解

技术栈:DrissionPage + listen.wait() + 毫秒时间戳 + requests PDF下载 + 本地文件去重


一、为什么巨潮资讯公告值得爬?

字段

投研价值

公告ID

唯一标识,便于增量更新

股票代码 / 名称

标的精准定位

公告类型

事件分类(财报 / 重组 / 减持)

发布时间

事件时间轴(毫秒级)

PDF下载地址

原始监管文件

是否重要

监管层标记的重点公告

👉 一份 CSV + 本地 PDF,就是一套可回测的A股事件数据库。

二、监听接口:new/disclosure

dp.listen.start('new/disclosure')dp.get('https://www.cninfo.com.cn/new/commonUrl?url=disclosure/list/notice#szseMain')
✅关键点:
巨潮资讯的公告数据全在 new/disclosure
必须在 get()之前启动监听
接口返回的是classifiedAnnouncements(双层数组)

三、毫秒时间戳转换(监管数据标配)

巨潮资讯时间字段:
"announcementTime": 1785324598000
✅ 正确转换:
time.strftime( '%Y-%m-%d %H:%M:%S', time.localtime(ann.get('announcementTime', 0) / 1000))
⚠️坑位:
忘记 / 1000(秒级 vs 毫秒级)
不判断默认值,空值直接炸

四、PDF 下载:Referer 是关键

巨潮资讯的 PDF 有防盗链:
HEADERS = { "User-Agent": "Mozilla/5.0", "Referer": "https://www.cninfo.com.cn/"}
✅正确下载逻辑:
pdf_url = f"http://static.cninfo.com.cn/{adjunct_url}"r = requests.get(pdf_url, headers=HEADERS, timeout=20)
⚠️坑位:
不加 Referer → 403
不判断 status_code 和文件大小 → 下载空文件
完整重试与超时策略不展开

五、本地文件去重(投研脚本必备)

if not local_pdf_path.exists(): download_pdf(pdf_url, local_pdf_path)else: print(f"✅ PDF 已存在,跳过")
✅价值:
避免重复下载(监管 PDF 不会变)
节省带宽与磁盘 IO
支持脚本中断后继续运行

六、公告结构的双重循环(极易写错)

接口返回结构:
"classifiedAnnouncements": [ [ {...}, {...} ], // 第一批 [ {...}, {...} ] // 第二批]
✅ 正确解析:
for batch in announcements: for ann in batch: ...
❌ 写成单层循环 → 丢数据一半

七、我故意不展开的三处

PDF 下载失败重试机制:网络抖动、403 临时封禁的指数退避策略
文件名校验与清洗:公告标题含非法字符、过长路径、同名文件冲突处理
增量更新逻辑:基于 announcementId 或 announcementTime 的断点续爬

八、这套数据能干什么?

量化投研:构建“公告事件 → 股价反应”回测集
合规风控:跟踪特定类型公告(如减持、问询函)
行业研究:批量分析某一行业的披露习惯
AI 投研:PDF 文本抽取 + NLP 事件识别

九、结尾软广

爬虫不难,难的是在巨潮资讯这种“监管级、高合规、强反爬”的平台上,稳定拿到结构化数据并批量下载 PDF。

最新文章

随机文章