1. 项目背景与核心价值
股票数据爬取是量化投资、金融分析的基础工作之一。东方财富网作为国内领先的财经门户,其上市公司业绩报表数据具有以下特点:
- 数据维度完整(营收、净利润、每股收益等关键指标)
- 更新及时(财报季实时更新)
- 历史数据可追溯(部分数据可查询多年历史)
这个爬虫项目要解决的核心痛点是:
- 人工收集效率低下(需逐个公司页面查看)
- 数据格式不统一(网页展示与结构化存储需求矛盾)
- 持续更新维护困难(财报季需要重复操作)
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术方案设计
2.1 整体架构
mermaid复制graph TD
A[东方财富网] -->|requests| B(HTML下载)
B -->|BeautifulSoup| C[数据解析]
C -->|pandas| D[数据清洗]
D -->|SQLAlchemy| E[MySQL存储]
2.2 技术选型说明
- 爬虫框架:requests + BeautifulSoup组合
- 相比Scrapy更轻量级
- 适合中等规模数据抓取(单次约3000+上市公司)
- 数据存储:MySQL 8.0
- 支持事务处理(避免数据部分写入)
- 便于后续SQL分析查询
- ORM工具:SQLAlchemy
- 提供连接池管理
- 自动处理数据类型转换
3. 核心实现细节
3.1 网页结构分析
目标页面示例:http://data.eastmoney.com/bbsj/202206/yjbb.html
关键特征:
- 数据通过异步加载(XHR请求)
- 分页参数:
pageNum和pageSize - 数据接口返回JSON格式
3.2 反爬应对策略
- 请求头伪装:
python复制headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Referer': 'http://data.eastmoney.com/bbsj/'
}
- 请求频率控制:
python复制import random
time.sleep(random.uniform(0.5, 1.5))
3.3 数据解析关键代码
python复制def parse_json(response):
data = response.json()
items = data['result']['data']
for item in items:
yield {
'stock_code': item['SECURITY_CODE'],
'company_name': item['SECURITY_NAME_ABBR'],
'report_date': item['REPORT_DATE'],
'revenue': float(item['TOTAL_OPERATE_INCOME']),
'net_profit': float(item['PAREN
