网页数据采集与接口方案报告
用于后续选择网页数据、公开接口、AkShare、浏览器渲染抓取等方案时参考
核心原则
能用结构化接口,就不要优先爬页面。
主数据优先级
官方 API / 公开接口 / AkShare > 页面 JSON > 浏览器渲染 > 逐页详情。
龙虎榜建议
日报自动化用 AkShare;重点复盘再用详情页核验。
一、先区分:网页爬取还是 API 接口
很多看起来像“网页爬取”的数据,底层其实是页面调用了一个 JSON 接口。真正的网页爬取,是从 HTML、DOM、页面文本或渲染后的浏览器内容里提取数据。
| 类型 | 判断方式 | 例子 | 稳定性 |
|---|---|---|---|
| API官方接口 | 有文档、认证、字段说明、调用限制。 | 交易所接口、付费金融数据接口、企业开放平台。 | 最高 |
| API非官方公开接口 | 网页背后调用 JSON 接口,通常在 Network 面板可见。 | 东方财富 datacenter-web、部分财经站榜单接口。 | 中高,可能改参数或反爬 |
| 混合AkShare / Tushare | 库封装多个数据源,底层可能是接口,也可能少量解析网页。 | ak.stock_lhb_detail_em() |
高,取决于库维护和上游接口 |
| 爬取静态 HTML | 直接下载 HTML,表格已经在源码里。 | 简单公告列表、静态表格页。 | 中,页面结构变化会影响解析 |
| 爬取浏览器渲染 | 必须打开浏览器等待 JS 渲染,再取 DOM 或页面文本。 | 动态榜单、需要 JS 运行的页面。 | 慢且重,仅适合兜底 |
二、常见采集方式对比
| 方式 | 底层逻辑 | 属于网页爬取还是 API | 适合场景 | 优点 | 缺点 |
|---|---|---|---|---|---|
| 官方 API | 数据方正式提供接口,有文档和权限体系。 | API | 商用系统、长期稳定任务、合规要求高的数据。 | 稳定、字段清楚、可追责、合规最好。 | 可能收费、申请复杂、限额严格。 |
| 公开 JSON 接口 | 网页前端调用的后台接口,返回 JSON。 | API | 榜单、行情、新闻列表、资金流等结构化数据。 | 快、轻、结构化、适合自动化。 | 接口可能改名、参数可能变化,需监控。 |
| AkShare / Tushare | 第三方库封装多个公开接口和少量网页解析。 | 通常偏 API | A 股、基金、宏观、行情、龙虎榜等批量采集。 | 开发成本低、字段统一、速度快。 | 依赖库维护;字段口径需要核验。 |
| 页面内嵌 JSON | HTML 源码里包含数据变量或 JSON 片段。 | 介于两者 | 接口被隐藏或难直接调用,但页面源码有完整数据。 | 比 DOM 稳、比浏览器渲染快。 | 结构可能变化,解析规则要维护。 |
| 静态 HTML 解析 | 下载 HTML,用正则或解析器提取表格。 | 网页爬取 | 静态表格、公告页面、简单列表。 | 实现简单,无需浏览器。 | 动态页面无效,页面改版容易失效。 |
| 浏览器渲染抓取 | 用 Edge/Chrome/Playwright 打开网页,等 JS 渲染后取数据。 | 网页爬取 | 没有接口、只有动态页面、需要模拟真实用户访问。 | 最接近人看到的页面,可作为兜底。 | 慢、重、易受弹窗/广告/反爬影响。 |
| 逐页详情抓取 | 先拿列表,再逐个打开详情页抓明细。 | 网页爬取 | 需要精确明细、补字段、核验重点标的。 | 信息最细,可补充主接口没有的字段。 | 非常慢,稳定性差,不适合日报主流程。 |
三、主数据的分层逻辑
自动化报告不应该把所有数据都当成同一层。建议分成主数据、补充数据和校验数据。
| 层级 | 作用 | 推荐来源 | 示例字段 |
|---|---|---|---|
| 主数据 | 决定排名、金额、数量、结论。 | 官方 API、公开 JSON 接口、AkShare/Tushare。 | 代码、名称、涨跌幅、净买额、上榜日期、上榜原因。 |
| 补充数据 | 丰富解释和业务含义。 | 网页解析、同花顺/雪球/公告、行业分类接口。 | 行业、概念、席位标签、新闻原因、连续上榜。 |
| 校验数据 | 发现主数据异常或口径偏差。 | 第二数据源、网页可见表格、历史缓存、详情页抽样。 | 总上榜数量、TOP 排名、机构买卖金额、页面截图。 |
建议:日报自动发送时,主数据必须走接口或 AkShare;网页爬取更适合补充字段和异常校验,不适合作为首选主流程。
四、AkShare 的定位
AkShare 不是数据源本身,而是一个第三方数据采集库。它封装了东方财富、新浪、交易所等多个公开数据源。
| 问题 | 说明 |
|---|---|
| 它是网页爬取还是 API? | 大多数函数偏 API/公开接口封装,也有少量函数可能解析网页。具体要看函数实现。 |
| 为什么快? | 它通常直接调用结构化接口,返回 pandas DataFrame,不需要打开网页、等待渲染、逐页解析。 |
| 适合什么? | A 股行情、龙虎榜、资金流、基金、宏观、财报等批量结构化数据。 |
| 风险是什么? | 上游接口变化、库版本变化、字段口径不透明、无人值守时需要异常提醒。 |
龙虎榜示例
import akshare as ak
df = ak.stock_lhb_detail_em(start_date="20260701", end_date="20260701")
print(df.head())
这类方式直接返回明细表,比逐只打开东方财富详情页快很多。
五、龙虎榜案例复盘
| 模式 | 数据来源 | 速度 | 口径 | 适合用途 |
|---|---|---|---|---|
| AkShare 模式 | ak.stock_lhb_detail_em |
快 | AkShare/东方财富接口明细口径。 | 日报主流程、定时发送、快速复盘。 |
| 首页 JSON 快速模式 | 东方财富首页内嵌 JSON,如 BILLBOARD_NET_AMT |
快 | 首页净买额汇总口径,可能不同于详情页累加。 | 快速扫榜、接口失败时的兜底。 |
| 详情页精确模式 | 逐只股票详情页,总合计行累加。 | 慢 | 多条上榜原因累加,细节最接近人工核验。 | 重点复盘、抽样校验、口径核对。 |
| 浏览器渲染模式 | Edge/Chrome 渲染网页后取 DOM。 | 中慢 | 接近人眼看到的网页。 | 接口被挡、页面动态加载时兜底。 |
本次经验:第一次人工报告使用详情页累加,所以多氟多等多原因上榜股票金额更大;快速版使用首页净买额,所以同一股票金额可能不同。两者不是谁对谁错,而是口径不同。
六、推荐架构
日常自动化
- 主流程:AkShare 或公开 API。
- 失败兜底:页面内嵌 JSON。
- 异常兜底:浏览器渲染抓取。
- 重点核验:详情页抽样,不建议全量逐页。
建议的流水线
AkShare / API 主数据
↓
字段清洗与口径统一
↓
页面 JSON 或第二数据源校验
↓
生成 HTML / Markdown 报告
↓
发送邮件 / Webhook / 保存归档
↓
异常时报警并保存 debug 文件
七、选择建议
| 需求 | 首选方案 | 原因 |
|---|---|---|
| 每天定时发送龙虎榜日报 | AkShare / API | 速度快、结构化、稳定性高。 |
| 盘后快速扫榜 | 首页 JSON / AkShare | 无需逐页抓详情,几秒到几十秒完成。 |
| 重点股票复盘 | 详情页抽样核验 | 能看到更细的席位和多原因上榜信息。 |
| 没有接口的网页数据 | 静态 HTML 或浏览器渲染 | 接口不可用时只能从页面层提取。 |
| 长期生产系统 | 官方 API / 付费数据源 | 合规、稳定、可追责。 |
八、落地注意事项
- 口径先定义:同样叫“净买额”,首页、接口、详情页累加可能不同。
- 保存原始数据:每天保存原始 JSON/CSV,便于追溯。
- 加异常报警:如上榜数量为 0、字段缺失、接口超时,应立即提示。
- 不要硬编码密钥:邮箱授权码、Webhook 地址应放配置文件或环境变量。
- 设置 fallback:API 失败后走页面 JSON,再失败走浏览器渲染。
- 定期核验:每隔一段时间抽样对比网页可见数据和接口数据。