翼度科技»论坛 编程开发 python 查看内容

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

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
前言

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

趁着现在还没上市,咱们提前学习一下用Python分析股票历史数据,抱住粗大腿坐等起飞~
好了话不多说,我们直接开始正文
准备工作

环境使用

  • Python 3.10 解释器
  • Pycharm 编辑器
模块使用

  • requests —> 数据请求模块
  • csv -> 保存csv表格
  • pandas -> 可以实现保存Excel表格文件
requests和pandas是第三方模块,需要手动安装,直接pip install 加上模块名字即可。
案例实现流程

数据来源分析

  • 明确需求: 明确采集的网站以及数据内容
    - 网址: 雪球网
    - 数据: 股票数据
  • 抓包分析: 分析 股票数据, 可以请求那个网址能够得到
    - 打开开发者工具: 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
    请求网址:
    请求方式:
    请求头:
代码实现步骤

  • 发送请求 -> 模拟浏览器对于url发送请求
  • 获取数据 -> 获取服务器返回响应数据
  • 解析数据 -> 提取我们需要数据
  • 保存数据 -> 保存表格文件 < csv / Excel > 中
代码解析

保存表格文件

  • csv -> csv模块
  • Excel -> pandas模块
  1. # 创建文件对象
  2. f = open('股票.csv', mode='w', encoding='utf-8', newline='')
  3. # fieldnames 字段名 表头一行数据 <前面保存字典的键>
  4. csv_writer= csv.DictWriter(f, fieldnames=[
  5.     '股票代码',
  6.     '股票名称',
  7.     '当前价',
  8.     '涨跌额',
  9.     '涨跌幅',
  10.     '年初至今',
  11.     '成交量',
  12.     '成交额',
  13.     '换手率',
  14.     '市盈率(TTM)',
  15.     '股息率',
  16.     '市值',
  17. ])
  18. # 写入表头
  19. csv_writer.writeheader()
  20. # 创建一个空列表
  21. content_list = []
  22. # 源码领取抠裙:815624229
复制代码
 
  1.  
复制代码
发送请求
模拟浏览器对于url发送请求

  • 模拟浏览器: headers 请求头

    • 从浏览器开发者工具中直接复制
    • 字典数据类型, 构建完整键值对形式

  • 请求网址:
    从浏览器开发者工具中直接复制
  • 发送请求:
    需要requests模块 -> pip install requests
响应对象 表示请求成功
  1. # 模拟浏览器
  2. headers = {
  3.     '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',
  4.     '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'
  5. }
  6. for page in range(1, 58):
  7.     print(f'==============正在采集第{page}页数据内容==============')
  8.     # 请求网址
  9.     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'
  10.     # 发送请求
  11.     response = requests.get(url=url, headers=headers)
复制代码
 
获取数据
获取服务器返回响应数据

  • response.text 获取响应文本数据
  • response.json() 获取响应json数据
  • response.content 获取响应二进制数据
解析数据
提取我们需要数据
解决数据方法根据获取数据来选择的:
字典取值方法 -> 键值对取值 (根据冒号左边的内容[键], 提取冒号右边的内容[值])
  1. json_data = response.json()  # 返回json字典数据
  2. # for循环遍历
  3. for index in json_data['data']['list'][1:]:
  4.     # 提取数据保存到字典里面, 方便后续保存表格文件
  5.     dit = {
  6.         '股票代码': index['symbol'],
  7.         '股票名称': index['name'],
  8.         '当前价': index['current'],
  9.         '涨跌额': index['chg'],
  10.         '涨跌幅': index['percent'],
  11.         '年初至今': index['current_year_percent'],
  12.         '成交量': index['volume'],
  13.         '成交额': index['amount'],
  14.         '换手率': index['turnover_rate'],
  15.         '市盈率(TTM)': index['pe_ttm'],
  16.         '股息率': index['dividend_yield'],
  17.         '市值': index['market_capital'],
  18.     }
  19.     # 保存数据
  20.     csv_writer.writerow(dit)
  21.     # 把字典添加到空列表里面
  22.     content_list.append(dit)
  23.     print(dit)
复制代码
 
效果展示

获取到数据保存到表格后

 

采集数据和可视化分析部分的代码我都打包好了,下方源码中自取。

 

可视化分析
  1. import pandas as pd         # 做表格数据处理模块 第三方的
  2. from pyecharts.charts import Bar    # 可视化模块 第三方模块
  3. from pyecharts import options as opts   # 可视化模块里面的设置模块(图表样式)
  4. # 1. 读取数据
  5. # 源码领取+抠裙 815624229
  6. df = pd.read_csv('股票.csv')
  7. x = list(df['股票名称'].values)
  8. y = list(df['成交量'].values)
  9. c = (
  10.     Bar()
  11.     .add_xaxis(x[:10])
  12.     .add_yaxis("成交额", y[:10])
  13.     .set_global_opts(
  14.         xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)),
  15.         title_opts=opts.TitleOpts(title="Bar-旋转X轴标签", subtitle="解决标签名字过长的问题"),
  16.     )
  17.     .render("成交量图表.html")
  18. )
复制代码
 
好了,今天的分享就到这结束了,下次见。

来源:https://www.cnblogs.com/hahaa/p/17852589.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具