首页 > 编程语言 >简单的用Python采集股票数据,保存表格后分析历史数据

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

时间:2023-11-23 21:55:30浏览次数:40  
标签:index 请求 表格 Python 模块 历史数据 csv 数据 opts

前言

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


趁着现在还没上市,咱们提前学习一下用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 = []
# 源码领取抠裙:815624229

 

 

发送请求

模拟浏览器对于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. 读取数据
# 源码领取+抠裙 815624229
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")
)

 

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

标签:index,请求,表格,Python,模块,历史数据,csv,数据,opts
From: https://www.cnblogs.com/hahaa/p/17852589.html

相关文章

  • pythonChap3变量与函数
    变量与操作变量用=赋值新的值会覆盖掉旧的值新值的数据类型不一定要与旧的相等变量命名规则:必须以字母或下划线(_)开头命名可由字母、数字和下划线组成大小写敏感尽量避免使用保留字命名保留字:['False','None','True','peg_parser','and','as','assert','async......
  • 前端vue使用表单form或表格table时的注意事项
     如图,该table表格的data名字为:MyData因此在后面需要在表格里展示数据的时候需要给MyData赋值如下图  注意必须为 1result.data.data 不能是result.data......
  • 聪明办法学python chap2数据类型与操作 3变量与函数
    Python(二)数据类型与操作类型print(type(2))#整型intprint(type(2.2))#浮点型floatprint(type(2>3.4))#布尔型boolprint(type(type(2)))#类型typeprint(t......
  • Python中的构造方法
     构造方法在Python中的使用:创建对象时用于初始化对象的实例变量。通过__init__()来定义1、什么是构造方法在面向对象编程中,构造方法是一个特殊的方法,用于在创建对象时初始化对象的状态。它在对象创建的过程中自动调用,负责为对象设置初始值。构造方法通常用于执行与对象相关的......
  • Python中,if __name__=="__main__"学习
    注意:Python的代码执行,都是依次从上往下执行在Python中,每个模块都有一个内置的变量name,用于表示当前模块的名称。当一个Python文件被执行时,Python解释器会首先将该文件作为一个模块导入,并执行其中的代码。此时,__name__的值为模块的名称。ifname==‘main’是一个常见的用法,它......
  • 代码随想训练营第三十九天(Python)| 62.不同路径、63. 不同路径 II、343. 整数拆分
    62.不同路径classSolution:defuniquePaths(self,m:int,n:int)->int:#dp[i][j]代表到达dp[i][j]有多少不同路径dp=[[0]*nfor_inrange(m)]#初始化foriinrange(m):dp[i][0]=1forjinra......
  • 运行python的几种方式
    通过cmd终端去运行按住win+r打开命令提示符,然后输入python,就可以进入python环境,输入你需要指定的python代码即可。#注意:这种方法只是建议临时使用一下,因为午饭保存数据。通过记事本新建一个记事本文档(后缀是否修改为.py不影响)里面输入python代码,一样通过cmd窗口去执行。......
  • 聪明办法学python.
    循环:foriinrange(x,y,z):     [x,y),z为步长,省略第一个参数默认为0,省略第三个参数默认为1.     while条件:     continue跳过此次循环     break跳出当前整个循环     pass占位符,不会被运行字符串:单引号'和双引号"......
  • Python TASK02 :数据类型操作
    #数据类型操作####常用内置类型BUILTINTYPES1.整数Integer(int)2.浮点数Float3.布尔值Boolean(bool)4.类型Type(是的,“类型”也是种类型!)严格的来说,Type是一种类的对象,Python是一门“面向对象友好”的语言 so:print(type(2))--><class'int'>......
  • Python Chap3 变量与函数
    #变量与函数##变量1.变量是一个**名字**,它所指代的是一段数据2.使用=来对这段数据的区域进行赋值x=53.新的值会覆盖掉旧的值4.新值的数据类型不必与旧值相同##变量命名规则1.必须以字母或者下划线_开头2.命名可由字母,数字或下划线组成3.大小写敏感4.尽量避免使......