1. 项目概述与目标
最近在研究金融数据分析,发现东方财富网的股票业绩报表数据非常全面,但手动复制粘贴效率太低。于是决定用Python写个爬虫,自动抓取这些数据并存入MySQL数据库,方便后续分析。
这个项目主要解决两个核心问题:一是如何绕过东方财富网的反爬机制获取数据;二是如何高效地将爬取到的结构化数据存储到MySQL数据库中。最终目标是实现一个稳定运行的爬虫脚本,能够定期自动更新股票业绩数据。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术选型与准备工作
2.1 工具与库的选择
选择Python作为开发语言主要考虑其丰富的爬虫生态和数据处理能力。具体用到的库包括:
requests:发送HTTP请求获取网页内容jsonpath:解析JSON格式的响应数据re:用正则表达式提取目标数据pymysql:连接和操作MySQL数据库math:计算总页数等数学运算
提示:在实际开发中发现,东方财富网的API返回的是JSONP格式数据,需要用正则表达式提取出真正的JSON内容。
2.2 数据库设计
在MySQL中创建了名为stock_data的数据库,并设计了balance_sheet表来存储资产负债表数据。表结构如下:
sql复制CREATE TABLE `balance_sheet` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`stock_code` varchar(10) DEFAULT NULL COMMENT '股票代码',
`stock_name` varchar(50) DEFAULT NULL COMMENT '股票简称',
`report_date` date DEFAULT NULL COMMENT '报告日期',
`total_assets` decimal(20,2) DEFAULT NULL COMMENT '总资产',
`total_liabilities` decimal(20,2) DEFAULT NULL COMMENT '总负债',
`asset_liability_ratio` decimal(10,4) DEFAULT NULL COMMENT '资产负债率',
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_stock_date` (`stock_code`,`report_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
这个设计考虑了数据唯一性(通过联合唯一索引避免重复插入)和查询效率。
3. 爬虫核心实现
3.1 分析目标网站
东方财富网的资产负债表数据是通过API接口动态加载的,页面URL为:https://data.eastmoney.com/bbsj/202406/zcfz.html。通过浏览器开发者工具分析网络请求,发现真正的数据接口是:
code复制https://datacenter-web.eastmoney.com/api/data/v1/get?callback=jQuery1123003163670672773544_1724209047227&sortColumns=NOTICE_DATE%2CSECURITY_CODE&sortTypes=-1%2C-1&pageSize=50&pageNumber=1&reportName=RPT_DMSK_FN_BALANCE&columns=ALL&filter=(SECURITY_TYPE_CODE+in+(%22058001001%22%2C%22058001008%22))(TRADE_MARKET_CODE!%3D%22069001017%22)(REPORT_DATE%3D%272024-03-31%27)
这个接口有几个关键参数:
pageSize:每页数据量pageNumber:当前页码reportName:报告类型(这里是资产负债表)REPORT_DATE:报告日
