Back to skills
extension
Category: Data & AnalyticsAPI key required

江西财经大学—竞赛与科研财经爬虫助手(全国通用)

财经类大学生数据爬虫——东方财富/巨潮/雪球/统计局/MBB/艾瑞/SEC/交易所/Tushare/信用中国/海关/国际组织 十三大金融数据源统一采集, 三阶段管道(索引→全文→文档),断点续传,软拦截检测,财务指标抽取+杜邦分解,对接 bizcomp-lab 商赛分析与 acct-research-kit 实证研究。 能力:A 股公告 PDF 下载、宏观数据抓取、研报全文、舆情监测、美股 10-K、财务比率横评、杜邦三因子拆解、Excel/Word/MD 输出、 交易所公告抓取、Tushare Pro 行情/宏观/基金数据、信用中国失信/处罚/红黑名单、海关进出口月报、IMF/世界银行/OECD 国际数据。 触发:爬取财经数据、下载年报、找茅台财报、行业研究数据、CPA 备考法规、商赛竞品对比、杜邦分析、巨潮公告、 东方财富研报、统计局 GDP/CPI、雪球舆情、SEC 10-K、艾瑞研报、麦肯锡白皮书、财务指标横评、自建对比表、断点续爬、 交易所公告、Tushare 行情、信用中国、海关数据、IMF 数据、世界银行数据、OECD 数据。 不触发:非财经领域的爬虫、恶意攻击/越权行为、付费墙内容破解、需要登录态的私域数据(如 Wind 终端、CSMAR 全量库)。

personAuthor: user_46970df5hubcommunity

finance-data-crawler v2.1.0 — 财经类大学生数据爬虫

十三大金融数据源统一采集 | 三阶段管道(索引→全文→文档) | 断点续传 + 软拦截检测 | 财务指标抽取 + 杜邦分解 | 对接 bizcomp-lab 商赛分析 + acct-research-kit 实证研究

⚡ 一键上手

直接对话即可触发,无需记忆命令:

帮我找茅台的年报数据
爬一下东方财富近一周关于 AI 板块的研报
我要做 PwC 杯的行业研究,需要珀莱雅和贝泰妮的财务对比
帮我收集 CPA 经济法最新的增值税法规
下载茅台、格力、平安近 3 年的 10-K(美股)/年报(A 股)

一键 CLI(用托管 Python,无需配环境):

PY="C:/Users/36118/.workbuddy/binaries/python/envs/default/Scripts/python.exe"
$PY scripts/finance_data_crawler.py list                              # 列出所有数据源
$PY scripts/finance_data_crawler.py info cninfo                      # 查看巨潮的能力与配额
$PY scripts/finance_data_crawler.py all eastmoney --days 7 --format excel  # 东财 7 天全流程

🧭 场景速查(想做什么 → 直接入口)

无需记忆命令,按"想做什么"找到入口。完整 CLI 见 references/05-cli-reference.md

| 你想做什么 | 推荐数据源 | CLI 命令 | |---|---|---| | 下载某 A 股公司年报/公告 PDF | 巨潮 | all cninfo --ticker 600519 --format excel | | 下载美股 10-K/10-Q | SEC EDGAR | all sec_edgar --ticker AAPL --format excel | | 抓 GDP/CPI/人口/就业宏观数据 | 国家统计局 | all stats --indicator cpi --years 3 | | 爬东财研报/公告/龙虎榜 | 东方财富 | all eastmoney --days 7 --format excel | | 爬雪球社区舆情/大 V 观点 | 雪球 | all xueqiu --keyword 茅台 --days 3 | | 下载 MBB/精品咨询白皮书 | MBB 官网 | all consulting --firm mckinsey --format md | | 下载艾瑞/亿欧/头豹研报 | 国内智库 | all research_report --topic AI --format excel | | 抓沪深北交易所公告/披露规则 | 交易所 | all exchange --market szse --days 30 | | 抓 Tushare 行情/宏观/基金数据 | Tushare Pro | all tushare --api stock_basic | | 查信用/失信/处罚/红黑名单 | 信用中国 | all credit_china | | 抓海关进出口月报 | 海关总署 | all customs --years 3 | | 抓 IMF/世行/OECD 国际数据 | 国际组织 | all international_orgs --org imf | | 财务指标横评(毛利率/ROE/净利率) | 跨源 | consume financial_metrics --tickers 600519,000651 | | 杜邦三因子分解对比 | 跨源 | consume duPont --tickers 600519,000651 --years 3 | | 商赛竞品对比表(自建) | 跨源 | consume competitor_table --industry 化妆品 |


📚 资源清单(找什么去哪里)

| 找什么 | 去哪里 | |---|---| | 数据源清单 + 分级 + 反爬难度 | references/00-info-sources-mapping.md | | 反爬策略(软拦截/限流/降级/登录墙) | references/01-anti-scraping-strategy.md | | 统一输出 schema(字段定义) | references/02-data-schema.md | | 与 bizcomp-lab 对接说明 | references/03-bizcomp-pipeline.md | | 场景→数据源智能推荐 | references/04-scene-mapper.md | | 完整 CLI 速查 | references/05-cli-reference.md | | 故障排查(空/限流/登录墙/解析失败) | references/06-troubleshooting.md | | 已注册数据源(机器可读) | data/sources.json | | Adapter 矩阵(覆盖范围) | data/adapter_matrix.csv | | 用户配置模板(Cookie/Token) | data/config_example.json |


🗺️ 路由:关键词 → 模块映射

| 用户关键词 | 触发模块 | CLI 示例 | |---|---|---| | 年报/财报/公告/招股书 | cninfo_adapter | index cninfo --ticker 600519 | | 10-K/10-Q/美股年报 | sec_edgar_adapter | index sec_edgar --ticker AAPL | | GDP/CPI/人口/就业/工业 | stats_adapter | index stats --indicator gdp | | 研报/龙虎榜/北向资金/板块 | eastmoney_adapter | index eastmoney --days 7 | | 舆情/大 V/讨论/股吧 | xueqiu_adapter | index xueqiu --keyword 茅台 | | 麦肯锡/BCG/贝恩/白皮书 | consulting_adapter | index consulting --firm mckinsey | | 艾瑞/亿欧/头豹/36 氪 | research_report_adapter | index research_report --topic AI | | 交易所公告/披露/规则 | exchange_adapter | index exchange --market szse | | Tushare 行情/宏观/基金 | tushare_adapter | index tushare --api stock_basic | | 信用中国/失信/处罚/红黑名单 | credit_china_adapter | index credit_china | | 海关/进出口月报 | customs_adapter | index customs | | IMF/世界银行/OECD/国际数据 | international_orgs_adapter | index international_orgs --org imf | | 证监会处罚/行政许可/IPO预披露 | csrc_adapter | index csrc --column penalty | | 创投/融资事件/赛道地图 | itjuzi_adapter | index itjuzi --keyword AI(⚠️登录墙,公开页有限) | | 任意公开网页/新闻站正文 | web_scraper_adapter | index web_scraper --urls https://... | | 单篇公众号文章(已授权) | gzh_adapter | index gzh --urls <授权文章链接>(⚠️合规受限) | | 单篇知网文献元数据(授权环境) | academic_cnki_adapter | index academic_cnki --urls <授权文献链接>(⚠️合规受限) | | Wind已授权数据转发 | wind_proxy_adapter | index wind_proxy --wind_code 600519.SH(⚠️需合法授权,不破解付费终端) | | 杜邦/ROE 拆解/财务比率 | data_consumers.duPont | consume duPont --tickers 600519,000651 | | 毛利率/净利率/费用率横评 | data_consumers.financial_metrics | consume financial_metrics --tickers 600519 | | 竞品对比表/行业横评 | data_consumers.competitor_table | consume competitor_table --industry 化妆品 | | 三表联动财务预测 | data_consumers.financial_forecast | consume financial_forecast --tickers 600519 --extra growth=0.1 | | PEST 宏观环境分析 | data_consumers.PEST_analysis | consume PEST_analysis --industry 化妆品 | | 供应链上下游地图 | data_consumers.supply_chain_map | consume supply_chain_map --industry 白酒 |


⚙️ 三阶段管道(必须分离,支持断点续传)

借鉴 news-site-batch-scraper 验证过的模式,每阶段可独立重跑。

Stage 1 — 建立索引(index)

目标:遍历数据源列表页,收集时间范围内的条目 URL + 元数据,输出 index.json

  1. 探测页面结构。优先顺序:🥇 AJAX/API 接口(最快)→ 🥈 静态分页 → 🥉 逐条跳转
  2. 复现接口请求。从页面 JS 提取 data 参数;⚠️ 服务端签名校验时保持原参数不动
  3. 翻页采集。终止条件:连续 3 页全部早于目标范围才停(防置顶文章干扰)
  4. 跨栏目去重。用 URL 作唯一标识
  5. 保存索引。输出 data/runs/<adapter>/<timestamp>/index.json

Stage 2 — 并发全文抓取(fetch)

目标:读 index.json,并发抓取每条全文,追加到 articles.jsonl

  1. 断点续传。启动时读 articles.jsonl 已抓 URL,构建跳过集合
  2. 并发抓取ThreadPoolExecutor(max_workers=6),每请求间隔 0.1~0.2s
  3. 软拦截检测。200 但内容是验证码页 → 自动切浏览器兜底;429/503 遵从 Retry-After
  4. URL 去重UrlDeduplicator 跨进程持久化(data/seen_urls.json
  5. 失败分类outlink(外链)/image_only(纯图片)/timeout(超时重试 1 次)/blocked(反爬标记)
  6. 实时写入。每抓一条立即追加 jsonl,每 50 条 flush

Stage 3 — 文档生成(build)

目标:读 articles.jsonl,生成 Excel/Word/Markdown/CSV。

  1. 重新严格过滤日期。用文章页发布时间而非列表接口时间(两者可能不一致)
  2. 按时间排序。升序
  3. 文档开头添加统计。总数/时间跨度/来源分布/生成时间
  4. Word 中文字体。宋体,style.element.rPr.rFonts.set(qn("w:eastAsia"), "宋体")
  5. Excel 多 sheet。每数据源一个 sheet + 汇总 sheet

🛡️ 反爬与降级(Gotchas)

参考 cn-financial-scraper v7.2.0 的六级降级链,本 skill 简化为三级。

三级降级链

HTTP(requests)  →  浏览器(Playwright headless)  →  放弃(标记 blocked)
     ↓                       ↓
 快但易被封            慢但能过 JS 检测

| 级别 | 触发条件 | 实现 | |---|---|---| | L1 HTTP | 默认 | http_utils.http_get | | L2 浏览器 | L1 返回 200 但内容是验证码页/空页/JS 渲染 | browser_fetch(需 Playwright) | | L3 放弃 | L2 也失败 | 标记 blocked,写入 failed.json |

软拦截检测(200 反爬页)

# 不是所有 200 都是真的页面——有些是验证码/访问被拒的短页面
SOFT_BLOCK_SIGNATURES = [
    "请输入验证码", "访问被拒", "请求过于频繁", "为了您的正常访问",
    "captcha", "verify", "robot check", "access denied"
]
# 命中签名 → 自动切 L2 浏览器兜底

域名级限流(DomainRateLimiter)

每个域名独立限流,避免单域名被封拖垮全局:

| 域名 | 默认间隔 | 说明 | |---|---|---| | eastmoney.com | 0.5s | 较宽松 | | cninfo.com.cn | 1.0s | 官方站,保守 | | xueqiu.com | 1.5s | 反爬较严 | | stats.gov.cn | 1.0s | 政府站 | | sec.gov | 0.8s | 美国政府站 |

常见反爬陷阱

| 陷阱 | 症状 | 解决 | |---|---|---| | AJAX 必须带 X-Requested-With: XMLHttpRequest | 返回"非法参数" | 从页面 JS 复制完整 data 参数 | | 服务端签名校验 | 改参数就 403 | 保持原参数不动 | | 雪球需 Cookie | 返回登录页 | 用户在 config.json 填 Cookie | | SEC EDGAR 限 User-Agent | 403 | 必须带 Sample Company sample@example.com | | 统计局 SPA 动态渲染 | HTTP 抓到空 | 自动切 L2 浏览器 | | 巨潮 PDF 下载 302 | 下载到 HTML | 跟随重定向 + 验证 Content-Type |


✅ 验证循环(数据质量校验)

这是 web-scraper/rupert 等竞品都没有的环节——本 skill 的核心差异化。

三维质量校验

# quality_checker.py 核心逻辑
def validate(data, source_name):
    """三维数据质量校验"""

    # 1. 缺失检查
    missing_ratio = count_missing(data) / len(data)
    if missing_ratio > 0.3:
        warns.append(f"{source_name} 缺失率 {missing_ratio:.0%},建议尝试备用数据源")

    # 2. 交叉验证(同一指标在不同数据源是否一致)
    if has_cross_source(field):
        other_value = lookup(field, alternate_source)
        if abs(value - other_value) / value > 0.05:  # 5% 偏差
            flags.append(f"{source_name}.{field}{alt_source} 偏差>5%,请人工核对")

    # 3. 异常值检测(Z-score >3 或业务常识边界)
    outliers = detect_outliers(data, method="z_score")
    # 业务边界:毛利率应在 [-20%, 95%],ROE 应在 [-50%, 80%]
    biz_outliers = detect_biz_boundary(data)
    if outliers or biz_outliers:
        flags.append(f"检测到 {len(outliers)} 个疑似异常值,建议查阅原始公告")

    return {"data": data, "warnings": warns, "flags": flags}

校验结果反馈给用户

校验完成后,输出不只有数据,还有:

✅ 巨潮资讯:抓取 23 条公告,0 异常
⚠️ 东方财富:抓取 45 条研报,2 条疑似异常值(毛利率 >95%),已标记
❌ 雪球:抓取 12 条讨论,3 条返回登录页(Cookie 过期),建议更新 config.json

📊 数据源分级(按学生使用场景)

| 优先级 | Adapter | 数据源 | 认证 | 预期成功率 | 难度 | |---|---|---|---|---|---| | ★★★ P0 | cninfo_adapter | 巨潮资讯 | ❌ 免费 | 85%+ | ⭐ | | ★★★ P0 | stats_adapter | 国家统计局 | ❌ 免费 | 90%+ | ⭐⭐ | | ★★★ P0 | eastmoney_adapter | 东方财富 | ❌ 免费 | 90%+ | ⭐ | | ★★ P1 | xueqiu_adapter | 雪球 | ⚠️ Cookie | 80%+ | ⭐⭐ | | ★★ P1 | consulting_adapter | MBB/精品咨询 | ❌ 免费 | 75%+ | ⭐⭐ | | ★★ P1 | research_report_adapter | 艾瑞/亿欧/头豹 | ❌ 免费 | 80%+ | ⭐ | | ★★ P1 | sec_edgar_adapter | SEC EDGAR | ❌ 免费 | 95%+ | ⭐ | | ★★ P1 | exchange_adapter | 沪深北交易所 | ❌ 免费 | 90%+ | ⭐⭐ | | ★★ P1 | tushare_adapter | Tushare Pro | ✅ Token | 95%+ | ⭐⭐ | | ★★ P1 | credit_china_adapter | 信用中国 | ❌ 免费 | 85%+ | ⭐⭐ | | ★★ P1 | customs_adapter | 海关总署 | ❌ 免费 | 80%+ | ⭐⭐ | | ★★ P1 | international_orgs_adapter | IMF/世界银行/OECD | ❌ 免费 | 90%+ | ⭐⭐ | | ★★ P1 | csrc_adapter | 证监会 | ❌ 免费 | 80%+ | ⭐⭐ | | ⭐ P2 | web_scraper_adapter | 通用网页(兜底) | ❌ 免费 | 70%+ | ⭐ | | ⭐ P3 | itjuzi_adapter | IT桔子(创投) | ⚠️ 登录墙 | 30-50% | ⭐⭐⭐ | | ⭐ P3 | gzh_adapter | 微信公众号 | ⚠️ 需授权 | 60%+ | ⭐⭐⭐ | | ⭐ P3 | academic_cnki_adapter | 知网 | ⚠️ 需机构授权 | 50%+ | ⭐⭐⭐ | | ⭐ P3 | wind_proxy_adapter | Wind(授权转发) | ⚠️ 需合法授权 | 取决于本地 | ⭐⭐⭐ |

v2.1 已实现 18 个适配器(12 基础 + 6 补齐),覆盖 18 大数据源/渠道。P3 为受限/合规场景(反爬严或不保证成功率,gzh/cnki/wind 有合规边界,详见下文"合规红线")。


🔄 下游消费层(对接 bizcomp-lab + acct-research-kit)

爬完数据不是终点——本 skill 提供 7 个 data_consumer,把原始数据加工成商赛可直接用的格式。 同时作为 acct-research-kit(会计实证 DID 研究)的数据底座,为其提供年报/专利/宏观/公告原料。

| Consumer | 输入 | 输出 | 对接 bizcomp-lab 哪步 | 对接 acct-research-kit | |---|---|---|---|---| | financial_metrics_extractor | PDF/HTML 公告 | 财务比率表(毛利率/净利率/ROE/费用率) | Phase 2 步骤 3:自建横向对比表 | DID 因变量(绿色创新投入) | | duPont_calculator | 财务比率表 | 杜邦三因子分解 + 横向对比 | Phase 2 步骤 4:自建杜邦分析模型 | 控制变量(ROE/杠杆/规模) | | industry_competitor_table | 多公司财务数据 | 行业竞品对比 Excel | Phase 3:竞品分析 | 行业固定效应分组 | | report_brief | 全部上述输出 | 商赛简报 Markdown | Phase 5:报告写作素材 | 文献综述素材汇总 | | financial_forecast_model | 年报基准财务指标 | 三表联动预测 Excel(3 年营收/净利/资产) | 商业计划书财务预测 | 预测期对照组设定 | | PEST_analysis | 已爬取宏观数据 | PEST 四维度分析 Markdown | Phase 1 宏观环境扫描 | 制度环境控制变量 | | supply_chain_map | 行业名 + 核心公司 | 供应链上下游地图 Excel/MD | Phase 2 产业链梳理 | 上下游关联分析 |

调用

$PY scripts/finance_data_crawler.py consume financial_metrics --tickers 600519,000651,603605
$PY scripts/finance_data_crawler.py consume duPont --tickers 600519,000651 --years 3
$PY scripts/finance_data_crawler.py consume competitor_table --industry 化妆品
$PY scripts/finance_data_crawler.py consume financial_forecast --tickers 600519 --extra growth=0.1
$PY scripts/finance_data_crawler.py consume PEST_analysis --industry 化妆品
$PY scripts/finance_data_crawler.py consume supply_chain_map --industry 白酒
$PY scripts/finance_data_crawler.py consume competitor_table --industry 化妆品

详见 references/03-bizcomp-pipeline.md


🔧 环境准备

# 托管 Python(推荐,已预装大部分依赖)
PY="C:/Users/36118/.workbuddy/binaries/python/envs/default/Scripts/python.exe"

# 三层依赖(对齐 cn-financial-scraper 模式)
$PY scripts/setup_env.py                 # 核心:requests + bs4 + lxml + pandas(已预装)
$PY scripts/setup_env.py --recommended   # + python-docx + openpyxl(Word/Excel 导出)
$PY scripts/setup_env.py --full          # + playwright(动态页面/类人爬取)

| 功能 | 需要的依赖 | 安装命令 | |---|---|---| | HTTP 爬取 / 索引 / 质量校验 | requests, bs4, lxml, pandas | setup_env.py(默认) | | Word/Excel 导出 | python-docx, openpyxl | setup_env.py --recommended | | 动态页面(SPA/类人爬取) | playwright | setup_env.py --full |


📝 多轮示例

示例 1:下载茅台年报 + 财务指标横评

用户:帮我找茅台的年报数据,顺便跟格力、平安对比一下财务指标
AI:识别场景=财报分析,推荐 cninfo_adapter
  ① index cninfo --ticker 600519 --years 3      # 茅台 3 年年报索引
  ② fetch cninfo                                  # 下载 PDF
  ③ consume financial_metrics --tickers 600519,000651,601318
     → 输出 Excel:毛利率/净利率/ROE/费用率横评表
  ④ consume duPont --tickers 600519,000651,601318 --years 3
     → 输出杜邦三因子分解对比
  ⑤ 质量校验:茅台毛利率 91% 正常;平安毛利率 100%(保险业特殊,标记提示)

示例 2:商赛行业研究(PwC 杯化妆品行业)

用户:我要做 PwC 杯的行业研究,需要珀莱雅和贝泰妮的财务对比
AI:识别场景=商赛竞品数据,多源组合
  ① index cninfo --ticker 603605              # 珀莱雅
  ② index cninfo --ticker 300957              # 贝泰妮
  ③ index sec_edgar --ticker EL               # 雅诗兰黛(美股对标)
  ④ index eastmoney --days 30 --topic 化妆品   # 行业研报
  ⑤ fetch all                                  # 全部下载
  ⑥ consume competitor_table --industry 化妆品
     → 输出 Excel:4 家公司 × 8 个指标 × 3 年趋势
  ⑦ consume report_brief --industry 化妆品
     → 输出 Markdown 商赛简报(含数据来源标注)

示例 3:断点续爬(雪球舆情)

用户:上次雪球爬到一半断了,继续
AI:读取 data/runs/xueqiu/<timestamp>/articles.jsonl
  → 已抓 47 条,跳过集合已构建
  → 从第 48 条继续,并发 6

🚫 合规红线(必读,违反即拒)

本 skill 坚持合法、合规、尊重版权与平台规则。以下模块有严格边界,任何越权使用意图都会被直接拒绝(返回 blocked 标记,不执行):

| 模块 | 合规边界 | 严禁事项 | |---|---|---| | gzh_adapter | 仅「用户已授权/自有/手动提供文章 URL」的单篇正文抽取 | 绕过微信登录态、逆向协议(wechaty非官方)、批量爬非授权号历史文章 | | academic_cnki_adapter | 仅「已购知网权限的机构网络(校园网/VPN)」下的文献元数据抽取 | 绕过付费墙、盗版镜像、逆向加密接口、批量下载受版权全文 | | wind_proxy_adapter | 仅「已合法持有 Wind 授权(WindPy)」环境的接口转发占位 | 破解/绕过/批量抓取 Wind 终端;无授权即拒绝,推荐 cninfo+tushare 替代 | | itjuzi_adapter | 仅采集公开预览页 | 破解会员墙、批量抓取付费字段、模拟登录 |

通用原则:不爬取需登录态的私域数据、不破解付费墙、不逆向任何平台协议、不批量 mirror 受版权保护的站点。合规替代路径:学校图书馆数字资源(知网/Wind/万得)、官方导出接口、开放获取(OA)文献。

凭证管理:所有 API Token / Cookie 仅存于本地私有文件 data/config.json(分发包内为空模板,不随包分发)。测试脚本 scripts/v2_test_suite.py 从该文件或环境变量 TUSHARE_TOKEN 读取凭证,未配置时自动跳过真实 API 测试,不硬编码任何凭证。


❓ 常见问题(FAQ)

Q1: 爬巨潮公告成功率高吗? A: 85%+。公告索引走官方 JSON 接口很稳定;PDF 下载注意 Content-Type 校验。

Q2: 没有 Playwright 能干什么? A: 核心功能(HTTP 爬取/索引/文档生成)不需要。只有 SPA 站点(MBB/智库/统计局部分页面)才需要。

Q3: 商赛要用 Wind 数据怎么办? A: 本 skill 明确不爬 Wind(付费终端)。替代:巨潮年报 PDF 提取财务比率(financial_metrics consumer)+ 学校图书馆数字资源。

Q4: 雪球 cookie 怎么拿? A: 浏览器登录 xueqiu.com → F12 → Application → Cookies → 复制 xq_a_token → 填入 data/config.json

Q5: 为什么 CSV 在 Excel 里中文乱码? A: 已用 utf-8-sig(带 BOM)编码,Excel 可直接打开。若仍乱码,用"数据→自文本导入→UTF-8"。