简单的用Python采集股票数据,保存表格后分析历史数据

前言

字节跳动如果上市,那么钟老板将成为我国第一个世界首富


趁着现在还没上市,咱们提前学习一下用Python分析股票历史数据,抱住粗大腿坐等起飞~

好了话不多说,我们直接开始正文

准备工作

环境使用

  • Python 3.10 解释器

  • Pycharm 编辑器

模块使用

  • requests —> 数据请求模块

  • csv -> 保存csv表格

  • pandas -> 可以实现保存Excel表格文件

requestspandas是第三方模块,需要手动安装,直接pip install 加上模块名字即可。

案例实现流程

数据来源分析

  1. 明确需求: 明确采集的网站以及数据内容
    - 网址: 雪球网
    - 数据: 股票数据

  2. 抓包分析: 分析 股票数据, 可以请求那个网址能够得到
    - 打开开发者工具: F12 / 右键点击检查选择 network (网络)
    - 点击第二页数据
    数据包: https://stock.xueqiu.com/v5/stock/screener/quote/list.json?page=2&size=30&order=desc&order_by=amount&exchange=CN&market=CN&type=sha
    请求网址:
    请求方式:
    请求头:

代码实现步骤

  1. 发送请求 -> 模拟浏览器对于url发送请求

  2. 获取数据 -> 获取服务器返回响应数据 <整个数据>

  3. 解析数据 -> 提取我们需要数据

  4. 保存数据 -> 保存表格文件 < csv / Excel > 中

代码解析

保存表格文件

  1. csv -> csv模块

  2. Excel -> pandas模块

# 创建文件对象  
f = open('股票.csv', mode='w', encoding='utf-8', newline='')  
# fieldnames 字段名 表头一行数据 <前面保存字典的键>  
csv_writer= csv.DictWriter(f, fieldnames=[  
    '股票代码',  
    '股票名称',  
    '当前价',  
    '涨跌额',  
    '涨跌幅',  
    '年初至今',  
    '成交量',  
    '成交额',  
    '换手率',  
    '市盈率(TTM)',  
    '股息率',  
    '市值',  
])  
# 写入表头  
csv_writer.writeheader()  
# 创建一个空列表  
content_list = []  

发送请求

模拟浏览器对于url发送请求

  • 模拟浏览器: headers 请求头

  • 从浏览器开发者工具中直接复制

  • 字典数据类型, 构建完整键值对形式

  • 请求网址:
    从浏览器开发者工具中直接复制

  • 发送请求:
    需要requests模块 -> pip install requests

<Response [200]> 响应对象 表示请求成功

# 模拟浏览器  
headers = {  
    'Cookie': 's=av17ye9exq; xq_a_token=cf755d099237875c767cae1769959cee5a1fb37c; xq_r_token=e073320f4256c0234a620b59c446e458455626d9; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTcwMTk5NTg4MCwiY3RtIjoxNzAwNTYzOTE3MDU2LCJjaWQiOiJkOWQwbjRBWnVwIn0.EbAa9h0fB9H_sH415f3x8r2CQiKmPbXZMnuKCy401scB1lMQKOffws6WTwPD2UzFWnntYxIQYSJpX509VUYYgCQkZ_bYtLbtYd5PfxLhWx7coauYA4d3x5aZolzB3eP5IthaYAb0Kbj3MPK8LVRBhABpRGr4wajISuABFNezroM_-5dpiOYK7Rk0UXtU2Qhrzxi1BVCgFUhPP-oR_vKenBw5tLzSqa6aO7CukgI7JVb-6LiymuBquE8FE-de8Vs3evai0fvtjiqryrH3EWM3nmDQIayigHRrYo595bD32kUPP4swHF5U2fwbLHTntIRAm9LsXn8sVf-6sUdgHoYZGg; cookiesu=931700563933974; u=931700563933974; device_id=5da9e0ae658f9fcd3d89078312131fb7; Hm_lvt_1db88642e346389874251b5a1eded6e3=1700563934; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1700563934',  
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36'  
}  
for page in range(1, 58):  
    print(f'==============正在采集第{page}页数据内容==============')  
    # 请求网址  
    url = f'https://stock.xueqiu.com/v5/stock/screener/quote/list.json?page={page}&size=30&order=desc&order_by=amount&exchange=CN&market=CN&type=sha'  
    # 发送请求  
    response = requests.get(url=url, headers=headers)  

获取数据

获取服务器返回响应数据 <整个数据>

  • response.text 获取响应文本数据 <字符串>

  • response.json() 获取响应json数据 <json数据 大部分情况字典数据>

  • response.content 获取响应二进制数据 <保存图片/视频/音频/特定格式文件的时候>

解析数据

提取我们需要数据
解决数据方法根据获取数据来选择的:
字典取值方法 -> 键值对取值 (根据冒号左边的内容[键], 提取冒号右边的内容[值])

json_data = response.json()  # 返回json字典数据  
# for循环遍历  
for index in json_data['data']['list'][1:]:  
    # 提取数据保存到字典里面, 方便后续保存表格文件  
    dit = {  
        '股票代码': index['symbol'],  
        '股票名称': index['name'],  
        '当前价': index['current'],  
        '涨跌额': index['chg'],  
        '涨跌幅': index['percent'],  
        '年初至今': index['current_year_percent'],  
        '成交量': index['volume'],  
        '成交额': index['amount'],  
        '换手率': index['turnover_rate'],  
        '市盈率(TTM)': index['pe_ttm'],  
        '股息率': index['dividend_yield'],  
        '市值': index['market_capital'],  
    }  
    # 保存数据  
    csv_writer.writerow(dit)  
    # 把字典添加到空列表里面  
    content_list.append(dit)  
    print(dit)  

效果展示

获取到数据保存到表格后

在这里插入图片描述

可视化分析

import pandas as pd         # 做表格数据处理模块 第三方的  
from pyecharts.charts import Bar    # 可视化模块 第三方模块  
from pyecharts import options as opts   # 可视化模块里面的设置模块(图表样式)  
   
# 1. 读取数据  
df = pd.read_csv('股票.csv')  
x = list(df['股票名称'].values)  
y = list(df['成交量'].values)  
   
c = (  
    Bar()  
    .add_xaxis(x[:10])  
    .add_yaxis("成交额", y[:10])  
    .set_global_opts(  
        xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),  
        title_opts=opts.TitleOpts(title="Bar-旋转X轴标签", subtitle="解决标签名字过长的问题"),  
    )  
    .render("成交量图表.html")  
)  

好了,今天的分享就到这结束了,下次见。

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述
若有侵权,请联系删除
  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值