巨潮股票数据(cninfo-stock-data)
从巨潮资讯网抓取 A 股个股数据。输入一个 6 位股票代码,即可拿到定期报告、公告列表、交流纪要/调研记录,并可下载 PDF 原文。
核心脚本:scripts/cninfo.py(纯标准库,无需 pip 安装任何包;可选 pymupdf 用于提 PDF 全文)。
数据来源与对应关系
| 需求 | 命令 | 说明 |
|---|---|---|
| 定期报告(年报/一季报/半年报/三季报) | reports | tabName=fulltext + 定期报告类目 |
| 交流纪要 / 调研记录 | research | 个股页 #research Tab,tabName=relation |
| 任意公告(按类目/关键词/日期) | query | 通用 fulltext 查询 |
| 全市场某日公告切片 | list | 不带 stock,按板块+日期 |
| 代码→orgId 映射 | orgid | 内部解析用,也可单独查询 |
| 下载 PDF | download 或 --out | 报表/纪要命令加 --out 目录即可 |
工作流程(按顺序)
Step 1 — 确认股票代码
用户给出代码或公司名/简称。若是名称,先用 orgid 命令解析出 6 位代码再继续;若是 6 位代码直接进入 Step 2。
python scripts/cninfo.py orgid 贵州茅台 # 名称不可直接查,需先得到 600519
python scripts/cninfo.py orgid 600519 # 或直接用代码拿 orgId / 元信息
orgid接受 6 位代码;若传的是公司名,先提示用户提供 6 位代码,或用orgid 600519反查名称。
Step 2 — 确定数据需求
问清楚用户要哪类数据(如已有上下文则跳过):
- 定期报告:哪一年、哪一季(年报/一季报/半年报/三季报)?给
--year+--kind。 - 交流纪要/调研:直接
research。 - 其它公告:指定类目(
--category)、关键词(--searchkey)或日期范围(--since/--until)。
不要一次全问;能从上下文推断就用推断值。
Step 3 — 执行采集
cd cninfo-stock-data
# 例1:个股全部定期报告
python scripts/cninfo.py reports 300308
# 例2:2025 年报本体
python scripts/cninfo.py reports 300308 --kind annual --year 2025
# 例3:2025 年一季报
python scripts/cninfo.py reports 300308 --kind q1 --year 2025
# 例4:交流纪要 / 调研记录
python scripts/cninfo.py research 300308
# 例5:指定类目公告(如股东大会),近一年
python scripts/cninfo.py query 300308 --category category_gddh_szsh --since 2025-01-01 --until 2026-01-01
# 例6:下载正文 PDF 到本地目录
python scripts/cninfo.py research 300308 --out ./out
python scripts/cninfo.py reports 300308 --kind annual --year 2025 --out ./out
默认输出为可读文本;--json 输出结构化 JSON(适合给下游或做表格)。每条记录含:
ann_id / sec_code / sec_name / ts_code / org_id / ann_date / ann_datetime / title / pdf_url / adjunct_url / ann_type。
Step 4 — 汇总交付
- 若用户要"清单",按时间倒序整理标题(定期报告可留
pdf_url以便下载)。 - 若在迭代分析,优先用
--json拿结构化数据。 - 重要:只在拿到真实返回后整理;不要臆造字段或数据。
关键约束(agent 须知)
- orgId:按股票精确查询必须带
stock=<6位>,<orgId>,脚本已自动经topSearch解析。也可作 Python 库用:在scripts/目录下import cninfo,调用cninfo.get_reports(code, ...)/cninfo.get_research(code, ...)。 - 交流纪要仅深市有数据:
research对沪市(6 开头)/北交所股票返回空列表,这是 cninfo 调研 Tab 的限制(前端沪市无调研 Tab),不是失败。遇到空结果如实说明。 - 报告年份在标题里:
--year按标题年份过滤(2025 年报 2026 年披露)。 - pageSize 硬限 30:脚本已自动翻页到
hasMore=false。 - 重复记录:cninfo 可能对同一 PDF 重复索引,脚本已按
pdf_url去重。 - 不要用
searchkey做精确代码查询:它是模糊匹配。 - PDF 可能 404 / 扫描件:下载失败会重试再报错;扫描件(律所/会计师审计意见)提不出字,定期报告本体几乎不会。
输出与失败处理
- 脚本返回非 0 表示异常;
-- json的 stdout 干净可解析,错误走 stderr。 - 采集失败先查网络与类目是否有效,再对照 reference.md 的参数说明。
- 大范围批量时留意频次(参考 reference.md 第 5 节)。
维护
- 类目变动以 cninfo
/new/data/list-search.json为准,更新scripts/cninfo.py中类目表即可。 - 接口字段/参数细节见 reference.md,改动后跑
python scripts/verify.py --live冒烟。
微信扫一扫