尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Python 爬虫实战:沪深 300 股票(上)—— 小白入门!爬取当天实时数据

Python 爬虫实战:沪深 300 股票(上)—— 小白入门!爬取当天实时数据
📅 发布时间:2026/6/20 7:28:36

引言:

这是沪深 300 股票爬虫系列的上篇,核心目标是帮零基础小白快速上手 —— 用 Python 爬取沪深 300 成分股的当天实时数据(包括最新价、涨跌幅、成交量等 16 个关键指标),最终导出为 Excel 文件,直接可用。

系列文章分工明确,避免一次性信息过载:
上篇(本文):聚焦「当天实时数据」,掌握 GET 请求、JSONP 解析、多页循环爬取 核心技能;
下篇:进阶「往期历史数据」,解锁 POST 负载构造、时间戳转换。

一、前置准备

打开电脑终端(Windows 按Win+R输cmd,Mac 打开终端),复制以下命令执行,安装爬取和数据处理必需的库:

pip install requests pandas openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple/

requests:负责发送网络请求,相当于 “模拟浏览器访问网页”,是爬数据的核心;
pandas:把爬来的杂乱数据整理成表格,方便导出 Excel;
openpyxl:支持 Excel 文件写入(避免导出时报错)。

沪深 300 是 A 股核心指数,包含 300 只优质股票(如贵州茅台、宁德时代)。我们要爬的是「当天实时行情数据」,最终拿到的 Excel 会包含这些关键指标:
代码、名称、最新价、涨跌幅、涨跌额、成交量、成交额、振幅、最高价、最低价、今开、昨收、量比、换手率、市盈率、市净率(共 16 项,满足日常看盘需求)。

二、核心原理

我们爬取的是东方财富网的接口数据(不是网页 HTML),效率更高、解析更简单:
接口类型:GET请求(参数直接拼在 URL 里,小白易理解);
数据格式:JSONP(本质是 “JSON 数据 + 函数包裹”,目的是跨域请求,我们只需用正则去掉外层 “壳”,就能拿到纯 JSON 数据);
多页爬取:接口用pn=1(第 1 页)、pn=2(第 2 页)控制页码,每页 20 条数据,循环 1-15 页即可爬完 300 只股票。

三、分步实操

1.抓包找接口

  1. 打开 Chrome 浏览器,访问东方财富网沪深 300 板块(随便搜 “东方财富 沪深 300 成分股”);
  2. 按F12打开「开发者工具」,切换到「Network(网络)」选项卡;
  3. 刷新页面,在搜索框输入get?cb=jQuery,找到名称带clist/get的请求(这就是我们要的数据源接口);
  4. 点击该请求,查看「Headers(请求头)」→「Request URL」(这是完整接口 URL)和「Request Headers」(里面的User-Agent和Cookie要复制到代码里,避免被反爬)。

2.解析 JSONP 数据

jQuery112405058079421913007_1702096593951({"data":{"diff":[{"f12":"600519","f14":"贵州茅台","f2":"1800.00",...}]}});

  • 问题:这不是纯 JSON,外面包了jQueryxxx(...)和末尾的;,无法直接解析;
  • 解决:用正则表达式提取(和)之间的内容,再去掉末尾的;,就能得到纯 JSON。

正则核心代码:

import re # content1是接口返回的原始数据 pattern = r'jQuery\d+_\d+\((.+?)\)' # 匹配jQuery开头的函数包裹 match = re.search(pattern, content1) if match: extracted_data = match.group(1) # 提取括号内的JSON clean_data = re.sub(r'}\);', '', extracted_data) # 去掉末尾的"});" json_data = json.loads(clean_data) # 转为JSON格式,可按key取值

3.循环爬取多页数据

接口每页 20 条数据,300 只股票需要爬 15 页(page从 1 到 15):

  • 用for page in range(1, 16)循环页码;
  • 把 URL 里的pn={page}设为动态变量,每次循环自动切换页码;
  • 每爬完一页休息 1-2 秒(避免请求太快被反爬,代码里已加随机延时)。

4.存储数据到 Excel

用pandas把爬来的列表数据整理成 DataFrame(表格),再用to_excel()导出,index=False表示不保存默认索引。

四、完整代码

import requests import json import time import re import pandas as pd # 在循环之前定义所有的空列表 code_list = [] # 创建 代码空列表,存储股票代码,下同 name_list = [] # 股票名称 Last_Trade_list = [] # 股票最新价 Change_list = [] # 股票站跌额 Chg_list = [] # 股票涨跌幅 Volume_list = [] # 股票成交量 Turnover_list = [] # 股票成交额 PrevClose_list = [] # 昨日收盘价 Open_list = [] # 今日开盘价 highest_list = [] # 股票最高价 lowest_list = [] # 股票最低价 amplitude_list = [] # 股票振幅 QRR_list = [] # 量比 TOR_list = [] # 换手率 PE_list = [] # 市盈率 PA_list = [] # 市净率 # 遍历页码 for page in range(1, 16): print(f'===============================正在爬取第{page}页数据内容=======================================') url = f'http://4.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112405058079421913007_1702096593951&pn={page}&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&wbp2u=|0|0|0|web&fid=f3&fs=b:BK0500+f:!50&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152,f45&_=1702096593985' headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 SLBrowser/9.0.0.10191 SLBChan/105', 'Cookie': 'qgqp_b_id=dfc29624f92cdad68210e05891a19e24; st_si=53708276698179; websitepoptg_show_time=1701908501838; st_asi=delete; HAList=ty-1-000300-%u6CAA%u6DF1300%2Cty-1-000001-%u4E0A%u8BC1%u6307%u6570%2Cty-0-300059-%u4E1C%u65B9%u8D22%u5BCC; st_pvi=57866953581055; st_sp=2023-12-07%2008%3A21%3A41; st_inirUrl=https%3A%2F%2Fwww.baidu.com%2Flink; st_sn=24; st_psi=20231209123634486-113200301321-2633832308' } res = requests.get(url, headers=headers) content1 = res.text pattern = r'jQuery112405058079421913007_1702096593951\((.+?)\)' match = re.search(pattern, content1) if match: extracted_data = match.group(1) clean_data = re.sub(r'}\);', '', extracted_data) json1 = json.loads(clean_data) data = json1['data'] diff_data = data['diff'] for di in diff_data: # 将获取到的数据添加到相应的列表中 code_list.append(di['f12']) name_list.append(di['f14']) Chg_list.append(di['f3']) highest_list.append(di['f15']) Change_list.append(di['f4']) Last_Trade_list.append(di['f2']) PrevClose_list.append(di['f18']) lowest_list.append(di['f16']) Volume_list.append(di['f5']) Open_list.append(di['f17']) Turnover_list.append(di['f6']) amplitude_list.append(di['f7']) QRR_list.append(di['f10']) TOR_list.append(di['f8']) PE_list.append(di['f9']) PA_list.append(di['f23']) # time.sleep(1) print(f'第{page}页爬取成功!!!') # 创建数据字典 data = { '代码': code_list, '名称': name_list, '最新价/元': Last_Trade_list, '涨跌幅/%': Chg_list, '涨跌额/元': Change_list, '成交量/手': Volume_list, '成交额/万元': Turnover_list, '振幅/%': amplitude_list, '最高/元': highest_list, '最低/元': lowest_list, '今开/元': Open_list, '昨收/元': PrevClose_list, '量比': QRR_list, '换手率': TOR_list, '市盈率(动态)': PE_list, '市净率': PA_list } # 转换为 DataFrame 并保存为 Excel 文件 df = pd.DataFrame(data) df.to_excel(r"沪深300.xlsx", 'Sheet', index=False)

五、小白必看

1. 替换User-Agent和Cookie

原代码中的User-Agent和Cookie是旧的,可能已失效。按以下步骤获取自己的:

  1. 按前面 “抓包找接口” 的步骤,找到目标请求;
  2. 点击「Headers」→ 下拉找到「Request Headers」;
  3. 复制User-Agent和Cookie的完整内容,替换代码中对应位置的内容。
2. 时间戳自动生成

原代码中_=1702096593985是固定时间戳,可能过期。优化后的代码用int(time.time() * 1000)生成当前毫秒级时间戳,每次运行自动更新,避免失效。

注:其实吧,这个只是有些网站有这些要求,而今天的目标网站不用在意这些细节,但这个又是比较教科书式的说法~

六、总结

  1. GET请求:参数拼在 URL 里,适合简单数据请求(如当天行情);
  2. JSONP解析:用正则去掉jQuery(...)外层壳,拿到纯 JSON 数据;
  3. 多页爬取:通过pn=页码动态切换页面,循环实现批量爬取;
  4. 反爬技巧:带全headers(伪装浏览器)+ 随机延时(避免高频请求);
  5. 数据存储:用pandas快速整理数据并导出 Excel,实用高效。

通过上篇,你已经掌握了 “爬取当天实时股票数据” 的完整流程!但如果想做趋势分析(比如看某只股票近 30 天的涨跌)、策略回测,就需要历史数据 —— 这正是下篇要讲的核心内容。

下篇预告:解锁POST请求、负载(Payload)构造、时间戳转换,教你爬取任意时间段的沪深 300 历史数据,让爬虫能力再上一个台阶!

如果运行代码时遇到问题,欢迎在评论区留言,我会逐一解答~ 关注我,下篇不见不散!

相关新闻

  • 如何让Dify中的Tesseract识别速度提升5倍?资深架构师亲授调优清单
  • 【专家亲授】:Dify平台视频帧存储优化的5大黄金法则
  • 应用冷启动优化

最新新闻

  • 周口市2026年最新黄金回收+白银回收+铂金回收+彩金回收门店TOP排行榜+推荐及联系方式+地址+电话+靠谱店铺指南 - 大熊猫898989
  • 乐秀视频剪辑器永久会员版:专业级视频剪辑工具全功能解锁
  • 推理模型落地实战:从思维链到工业级可信推理系统
  • 2026年兰州市PMP培训机构哪家好?官方授权R.E.P.报考指南 - 众智商学院课程中心
  • YOLO12模型WebUI自动化测试与CI/CD实践:从Selenium到Jenkins全流程解析
  • 三明市本地2026年最新黄金回收靠谱门店TOP排行榜+白银回收+铂金回收+彩金回收及联系方式+地址+电话+诚信店铺推荐 - 盛世金银回收

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号