第三章 数据采集策略:公开数据源、API与爬虫技术选型

做产业链图谱,最头疼的是什么?

不是分析模型,不是可视化工具——是数据。我见过太多团队,模型建得漂漂亮亮,结果数据一塌糊涂,最后全白干。说白了,数据采集是整条产业链分析的根基。根基不稳,上面盖什么都是危楼。

3.1 公开数据源:招股书、行业报告、新闻

公开数据源,是我个人最推荐优先挖掘的。为什么?因为合规、稳定、可追溯。你想想看,做产业链分析,如果数据来源说不清楚,谁敢信你的结论?

3.1.1 招股书

招股书是宝藏。我在项目中遇到过,某家新能源企业的招股书里,直接披露了前五大供应商的采购金额和占比。这种数据,你在任何行业报告里都找不到。

数据源 关键字段 获取方式
招股书(IPO) 供应商、客户、成本结构、产能 证监会官网、巨潮资讯网
年报/半年报 营收构成、研发投入、前五大客户 公司官网、上交所/深交所
债券募集说明书 资产负债、现金流、项目投资 中国债券信息网
我的习惯: 招股书里「业务与技术」章节,直接复制出来做关键词提取。我曾经用这个方法,半小时就理清了一条锂电池产业链的上下游关系。

3.1.2 行业报告

行业报告的问题在于——太贵。一份靠谱的券商研报,动辄几千块。但也不是没办法。

  • 免费渠道: 东方财富、同花顺的研报平台,可以看摘要
  • 付费渠道: 万得、彭博,数据全但贵
  • 灰色渠道: 嗯,这个我不建议碰,合规风险太高

我建议的做法是:先用免费渠道做初步筛选,确定有价值的报告后再考虑付费。别一上来就买买买,钱花完了数据还没用上。

3.1.3 新闻与公告

新闻数据的特点是时效性强,但噪音大。你想想看,一条「某公司签订战略合作协议」的新闻,可能只是炒作,也可能是真的大单。

避坑指南: 我曾经因为一条新闻,误判了某家公司的产能扩张节奏。后来发现,那只是意向协议,根本没落地。所以,新闻数据一定要交叉验证。

3.2 API数据获取

API是效率最高的方式。没有之一。手动下载数据?那是上个世纪的做法了。

3.2.1 常用API接口

平台 接口类型 免费额度 适用场景
天眼查/企查查 企业信息、股权结构 有限(每天几十次) 产业链节点企业查询
万得(Wind) 金融数据、行业数据 无免费 上市公司财务数据
百度地图/高德 地理位置、POI 每日有免费额度 产业园区、工厂分布
微博/微信 社交媒体数据 有限 舆情监测、品牌热度

3.2.2 API调用示例

以天眼查为例,获取企业基本信息:

import requests
import json

# 天眼查API配置
api_key = "your_api_key_here"
url = "https://open.api.tianyancha.com/services/open/ic/baseinfo/normal"

headers = {
    "Authorization": api_key,
    "Content-Type": "application/json"
}

params = {
    "keyword": "宁德时代",
    "pageNum": 1,
    "pageSize": 10
}

response = requests.get(url, headers=headers, params=params)
data = response.json()

# 提取关键信息
if data.get("result"):
    for item in data["result"]:
        print(f"企业名称: {item['name']}")
        print(f"法定代表人: {item['legalPersonName']}")
        print(f"注册资本: {item['regCapital']}")
        print(f"成立日期: {item['estiblishTime']}")
        print("---")
核心要点: API调用一定要做异常处理。网络波动、接口限流、参数错误,这些都是家常便饭。我习惯在代码里加个重试机制,最多重试3次,每次间隔2秒。

3.3 爬虫技术选型

爬虫,是最后的手段。为什么这么说?因为爬虫有法律风险、技术门槛、维护成本。但有些数据,不用爬虫就是拿不到。

3.3.1 技术选型对比

技术方案 适用场景 学习成本 反爬能力 维护成本
Requests + BeautifulSoup 静态页面、简单列表页
Scrapy 大规模、多页面爬取
Selenium/Playwright 动态渲染、JS加载页面 中高
Puppeteer (Node.js) 复杂交互、截图

3.3.2 我的选型原则

说白了,就一句话:能用简单的,就别用复杂的

  • 如果页面是静态HTML,直接用Requests + BeautifulSoup,半小时搞定
  • 如果页面有简单的AJAX加载,试试直接调接口,比爬页面快10倍
  • 如果页面是React/Vue渲染的,才考虑Selenium或Playwright
我曾经踩过的坑: 有一次为了爬一个动态页面,我用了Selenium。结果页面加载太慢,一个页面要等5秒。后来发现,那个页面其实有个隐藏的JSON接口,直接调接口1秒就拿到了数据。所以,先分析网络请求,再决定技术方案。

3.3.3 反爬应对策略

现在的网站,反爬手段越来越多了。我总结了几条实用策略:

  1. User-Agent轮换: 别用一个固定的UA,容易被识别
  2. IP代理池: 免费代理不稳定,付费的也不贵
  3. 请求频率控制: 加个随机延时,别太规律
  4. Cookie管理: 有些网站需要登录后的Cookie
  5. 验证码处理: 简单的可以用OCR,复杂的建议用打码平台
小技巧: 我习惯在爬虫代码里加个日志,记录每次请求的状态码和响应时间。这样出了问题,能快速定位是网络问题还是反爬问题。

3.4 数据采集策略总览

最后,我用一张图来总结本章的核心逻辑。这张图是我自己画的,希望能帮你理清思路。

数据采集策略总览 数据源层 招股书/年报 行业报告 新闻/公告 社交媒体 采集方式层 手动下载/整理 API接口调用 爬虫自动化 技术选型层 Requests+BS4 Scrapy Selenium Playwright Puppeteer 结构化数据 → 产业链图谱

这张图的核心逻辑是:先确定数据源,再选择采集方式,最后匹配技术方案。别搞反了。我见过有人先学了Scrapy,然后什么数据都用Scrapy爬,结果招股书明明可以直接下载PDF,他非要去爬网页——这不是技术选型,这是炫技。

最后说一句: 数据采集不是一锤子买卖。产业链数据是动态变化的,今天采集的数据,明天可能就过期了。所以,一定要建立数据更新的机制。我个人的做法是:每周跑一次增量采集,每月做一次全量更新。这样既能保证时效性,又不会浪费太多资源。

公众号:蓝海资料掘金营,微信deep3321