通过巨潮资讯网公告搜索 API + 浏览器自动化 + 直链下载,自动发现并下载A股(沪市/深市)和港股上市公司的年度报告、季度报告 PDF,无需手动查找 announcementId。
当用户请求以下任一操作时触发:
| 交易所 | 数据源 | 说明 |
|---|---|---|
| -------- | -------- | ------ |
| 沪市/深市 | 巨潮资讯 API | column=sse/szse,agent-browser 提取 PDF |
| 港股 | 巨潮资讯 API | column=hke,注意非标准 orgId |
| 北交所 | 东方财富 API | 巨潮不支持!走东方财富 np-anotice-stock |
① API搜索公告 → ② 提取announcementId → ③ 浏览器获取PDF直链 → ④ requests下载PDF
① 搜索公告(art_code) → ② 直接下载PDF(pdf.dfcfw.com)
详见 references/api_params.md 末尾的北交所替代方案。
调用巨潮资讯公告搜索接口获取 announcementId:
POST https://www.cninfo.com.cn/new/hisAnnouncement/query
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
必填参数:
| 参数 | 值 | 说明 |
|---|---|---|
| ------ | ----- | ------ |
pageNum | "1" | 页码 |
pageSize | "30" | 每页条数 |
column | sse / szse / hke | 交易所代码 |
tabName | "fulltext" | ⚠️ 不是 full_text |
plate | "" | 板块 |
stock | "股票代码,orgId" | 如 600519,gssh0600519 |
searchkey | "年报" | 搜索关键词 |
seDate | "" 或日期范围 | 日期范围精确筛选 |
isHLtitle | "true" | 高亮标题 |
搜索策略(按情况选择):
stock="",searchkey="{公司名} 年报",在结果中过滤 secCodestock="{代码},{orgId}",searchkey="年报"(港股不能用 category)category="category_ndbg_szsh"> 详见 references/api_params.md
⚠️ A股搜索陷阱: 很多深市/科创板股票用 stock 参数+标准 orgId 格式返回0结果,必须改用公司名模糊搜索。orgId 格式也有多种:纯数字(99000xxx)、GD100xxx、nssc1000xxx 等。
⚠️ "提示性公告"陷阱: 搜索"年度报告"时可能先匹配到"2025年年度报告披露的提示性公告"——这是通知不是年报本身!需排除"提示性"/"提示"关键词,找到真正的年报公告。
获取 announcementId:从响应 JSON 中提取 announcements[].announcementId
⚡ 捷径:adjunctUrl 直连
当使用 stock 参数(非空)进行精确搜索时,API 响应中可能包含 adjunctUrl 字段(如 finalpage/2026-04-30/1225258793.PDF)。此时可直接拼接 PDF 直链,跳过 agent-browser:
https://static.cninfo.com.cn/{adjunctUrl}
优先检查 adjunctUrl,有则直连下载;无则走下面的 agent-browser 流程。
巨潮资讯公告详情页是 JS 动态渲染的,PDF 链接在 标签中。
使用 agent-browser 获取 PDF 直链:
# 1. 打开详情页
agent-browser open "https://www.cninfo.com.cn/new/disclosure/detail?plate={exchange}&orgId={orgId}&stockCode={code}&announcementId={annId}"
# 2. 等页面加载(⚠️ 巨潮页面用 networkidle 会卡死,改用 load 或直接 sleep 1.5秒)
agent-browser wait --load load
# 3. 提取 PDF 直链
agent-browser eval "document.querySelector('embed')?.src"
PDF 地址格式:https://static.cninfo.com.cn/finalpage/{日期}/{announcementId}.PDF
> ⚠️ 域名是 static.cninfo.com.cn,不是 www.cninfo.com.cn
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Referer': 'https://www.cninfo.com.cn/',
}
resp = requests.get(pdf_url, headers=headers, timeout=120, stream=True)
resp.raise_for_status()
with open(output_path, 'wb') as f:
for chunk in resp.iter_content(8192):
f.write(chunk)
| 依赖 | 版本要求 | 安装方式 | 用途 |
|---|---|---|---|
| ------ | ---------- | ---------- | ------ |
| Python | ≥ 3.9 | 系统安装 | 运行下载脚本 |
requests | ≥ 2.28 | pip install requests | HTTP 请求(API搜索 + PDF下载) |
agent-browser | latest | npm install -g agent-browser && agent-browser install | 巨潮PDF直链提取 |
| 依赖 | 用途 |
|---|---|
| ------ | ------ |
playwright | 东方财富PDF兜底下载(防盗链场景) |
asyncio | Playwright 异步支持(Python内置) |
# Python 依赖
pip install requests
# agent-browser(巨潮PDF提取必需)
npm install -g agent-browser
agent-browser install
# 可选:Playwright 兜底
pip install playwright
playwright install chromium
~/.workbuddy/skills/财报下载/
├── SKILL.md # 本文件
└── references/
└── api_params.md # API参数详细参考
技能依赖以下 Python 模块(需放在同一项目目录下):
| 模块 | 用途 |
|---|---|
| ------ | ------ |
cninfo_downloader.py | 巨潮资讯(沪/深/港)搜索+下载 |
annual_report_downloader.py | 东方财富(北交所)搜索+下载 |
stock_search.py | 股票代码/名称智能解析 |
{项目目录}/cninfo_reports/{股票代码}_{公司名}/
例如:cninfo_reports/600519_贵州茅台/2025年报.pdf
| 报告类型 | 文件名 | 示例 |
|---|---|---|
| ---------- | -------- | ------ |
| 年报 | {年份}年报.pdf | 2025年报.pdf |
| 一季报 | {年份}Q1.pdf | 2025Q1.pdf |
| 半年报/中报 | {年份}Q2.pdf | 2025Q2.pdf |
| 三季报 | {年份}Q3.pdf | 2025Q3.pdf |
# 巨潮下载器
from cninfo_downloader import CninfoReportDownloader
dl = CninfoReportDownloader(output_dir="/your/path/cninfo_reports")
# 东方财富下载器
from annual_report_downloader import AnnualReportDownloader
dl = AnnualReportDownloader(output_dir="/your/path/cninfo_reports")
两个下载器默认都输出到 cninfo_reports/,可通过 output_dir 参数自定义。
gssz 不是 gszs;部分A股/港股orgId为非标准格式(纯数字/GD/nssc前缀)category 过滤,必须用 searchkey;orgId可能为纯数字static.cninfo.com.cn,东方财富用 pdf.dfcfw.comwait --load networkidle 会卡死,改用 --load load 或直接 sleep 1.5秒references/api_params.md — 完整 API 参数、orgId 格式、交易所代码对照表共 1 个版本