【爬虫】爬取股票数据写入数据库并显示(四)

news2025/1/18 13:55:41

在这里插入图片描述
本文所涉及代码已全部打包上传,需要可以到文章末尾查看获取方式,免费,仅做学习交流!!!

股票客户端软件

2024/05,本文主要内容如下:

  1. 使用python requests爬取东方财富官网数据。
  2. 将爬取的数据通过sqlalchemy写入sqlite数据库。
  3. 使用pyqt5写界面进行显示所有爬取的数据列表,以及历史K线信息。
  4. 如果本地数据库存在,则检查是否是最新数据,进行更新追加数据,否则直接显示本地数据。
  5. 可以根据时间段,查询显示K线组合。
  6. 后续计划:会不断完善,最终目标是做出一个简单的股票查看客户端,并能够根据条件查询选股。
  7. 本系列所有源码均无偿分享,仅作交流无其他,供大家参考。
    python依赖环境如下:
conda create --name xuan_gu python=3.9 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda remove --name xuan_gu --all
conda activate xuan_gu

pip install PyQt5==5.15.10 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pyqtgraph==0.13.6 -i https://pypi.tuna.tsinghua.edu.cn/simple
#python -m pyqtgraph.examples 查看图形化的pyqtgraph示例

pip install requests==2.31.0 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pandas==2.2.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install jsonpath==0.8.2 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install sqlalchemy==2.0.30 -i https://pypi.tuna.tsinghua.edu.cn/simple

1. 爬取数据并入库

可参考我之前写的文章,目前爬取的数据包括:

  • 获取所有的股票基本名称、市值等
  • 获取股票的历史k线
    【爬虫】爬取A股数据写入数据库(一)
    【爬虫】爬取A股数据写入数据库(二)
    【爬虫】爬取股票历史K线数据写入数据库(三)

2. 界面逻辑

  1. 读取数据库填充左侧列表
  2. 点击左侧列表,查询本地数据库中的日期,如果不是最新日期,则爬取最新的K线入库并显示
  3. 时间可筛选K线显示
  4. 光标定位,会将信息提取到右上角显示
    主K线逻辑如下所示:
"""
股票软件用到的 股票K线图画板
class CandlestickItem: K线图绘制的封装类: 绘制K线图
"""
from PyQt5 import QtWidgets, QtCore
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui
from K_UI.base_widget import CandlestickItem

class K_Widget(QtWidgets.QWidget):
    signal_TextShow = QtCore.pyqtSignal(str) # 定义信号
    def __init__(self):
        super().__init__()
        self.init_data()
        self.init_ui()
        
    def init_data(self):
        self.cur_code = 0
        self.cur_name = ''
        self.cur_candle_data = []
        pass
        
    def init_ui(self):
        self.pw = pg.PlotWidget()
        self.x_axis = self.pw.getAxis('bottom')
        self.x_axis.setHeight(50) # 设置X轴的高度
        self.x_axis.setStyle(tickFont=QtGui.QFont("Arial", 10))
        self.pw.setMouseEnabled(x=True, y=False)
        self.pw.setAutoVisible(x=False, y=True)
        
        layout = QtWidgets.QVBoxLayout()
        layout.addWidget(self.pw)
        self.setLayout(layout)
        
        self.pw.scene().sigMouseMoved.connect(self.mouseMoved)
        
    def caculate_and_show_data(self, code, name, candle_data):
        '''
            candle_data = 
            [(1/2/3, '2024-05-09', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)]
            1/2/3是编号, 从0开始
            1     2    3     4    5       6       7     8      9      10
            开盘, 收盘, 最高, 最低, 成交量, 成交额, 振幅, 涨跌幅, 涨跌额, 换手率
        '''
        self.pw.clear()

        self.cur_code = code
        self.cur_name = name
        self.cur_candle_data = candle_data
        # 自定义X轴标签
        x_labels, x_show_labels = [],[]  # 格式为 (位置, 标签字符串), 例如: [(0, 2025-05-10), (1, 2025-05-11)]
        for (t, time, open, close, max, min, cjl, cje, zf, zdf, zde, hsl) in candle_data:
            x_labels.append((t, time))
        
        # 获取自定义的X轴实例 并设置自定义标签 每间隔6个x轴的单位,显示x轴的时间串
        for i, label in enumerate(x_labels):
            if i % 6 == 0:
                lab_x = f'{label[1][:4]}\n{label[1][-5:]}'
                x_show_labels.append((i, lab_x))
                # x_show_labels.append((i, label[1]))
        self.x_axis.setTicks([x_show_labels])
        
        self.vLine = pg.InfiniteLine(angle=90, movable=False)
        self.hLine = pg.InfiniteLine(angle=0, movable=False)
        # self.label_tip = pg.TextItem()
        self.pw.addItem(self.vLine, ignoreBounds=True)
        self.pw.addItem(self.hLine, ignoreBounds=True)
        # self.pw.addItem(self.label_tip, ignoreBounds=True)
        
        self.vb = self.pw.getViewBox()
        candle_fixed_target = CandlestickItem(candle_data)
        self.pw.addItem(candle_fixed_target)

    def mouseMoved(self, evt):
        '''
self.cur_candle_data = 
[(0/1(编号0开始), '2024-05-09',  1, 2, 3, 4, 5, 6, 7, 8, 9, 10)]

                                1     2    3     4    5       6       7     8      9      10
                                开盘, 收盘, 最高, 最低, 成交量, 成交额, 振幅, 涨跌幅, 涨跌额, 换手率
        '''
        pos = evt
        if self.pw.sceneBoundingRect().contains(pos):
            if hasattr(self, 'vb'):
                mousePoint = self.vb.mapSceneToView(pos)
                index = int(mousePoint.x())
                # print('mouse x=', mousePoint.x(), 'mouse y=', mousePoint.y())
                # mouse x= 83.73188814580678 mouse y= 12.14799677228214
                if index > 0 and index < len(self.cur_candle_data):
                    zdf = self.cur_candle_data[index][9]
                    y = f"{mousePoint.y():.2f}"
                    html_str = f"<span style='font-size: 12pt'>【{self.cur_name}】 " \
                               f"<span style='font-size: 12pt'>({self.cur_candle_data[index][1]})</span> " \
                               f"<span style='font-size: 12pt'>价格: {y}</span> "
                    if int(zdf) > 0:
                        html_str += f"<span style='color: red'>涨跌幅: {zdf}%</span>  "
                    else:
                        html_str += f"<span style='color: green'>涨跌幅: {zdf}%</span>  "
                    
                    self.signal_TextShow.emit(html_str)
                    # self.label_text.setHtml(html_str)
                    # self.label_tip.setPos(mousePoint.x(), mousePoint.y())
                pass

                self.vLine.setPos(mousePoint.x())
                self.hLine.setPos(mousePoint.y())
        pass

结束语

由于本人能力有限,难免有疏漏之处。
文中源码文件【获取方式】:关注公众号:利哥AI实例探险
给公众号发送 爬虫股票客户端 获取下载方式,免费,无套路,只要关注!!!
原文链接如下:
【爬虫】爬取股票数据写入数据库并显示(四)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1674501.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ros1版本apollo感知融合算法

apollo.ros-7.0.0 本文章针对apollo 7.0.0版本进行了ros1移植&#xff0c;具体介绍见下文。 PS&#xff1a;项目开发详细了解可在评论区留言。 ros版本apollo7.0.0感知算法 基于ros1的apollo 7.0.0感知融合算法。 简介 此项目基于ros1的apollo 7.0.0感知融合算法&#xff0…

05. 【Java教程】第一个 Java 程序

本节我们将以Windows操作系统为例&#xff0c;编写并执行第一个Java程序。在这之前&#xff0c;请确保你的操作系统上已经安装了JDK 1. 编译程序 大家可能有个疑问&#xff0c;为什么需要编译程序呢&#xff1f;计算机不能直接执行我们编写的源代码吗&#xff1f; 这是由于计…

OV SSL证书的特点

OV SSL证书&#xff0c;全称为Organization Validation SSL Certificate&#xff08;组织验证型SSL证书&#xff09;&#xff0c;是一种中级的SSL证书类型。与仅验证域名所有权的DV&#xff08;Domain Validation&#xff09;证书不同&#xff0c;OV证书在颁发前会执行更加严格…

Jmeter接口测试之参数化

在接口测试中&#xff0c;某些时候一些场景会使用到参数化的场景&#xff0c;参数化简单的说就是同一个请求需要不同的数据&#xff0c;比如在性能测试中需要并发多个用户的场景&#xff0c;这样的目的是为了模拟真实的用户场景&#xff0c;需要模拟不同的账号&#xff0c;这里…

ZL-016D多通道小鼠主动跑轮系统主要研究动物生活节律

简单介绍&#xff1a; 多通道小鼠主动跑轮系统是由动物本身自发运动来推动跑轮转动。在这种构型中&#xff0c;笼内动物长期活动的信息&#xff0c;如跑轮转动方向、转数、累计总行程等&#xff0c;能够使用编码器进行长度计记录。此装置由转轮组件、笼体、以及转动方向速度传…

独享静态IP:跨境网络新助手

在数字化浪潮席卷全球的今天&#xff0c;互联网已成为人们生活中不可或缺的一部分。而在这个由数据和信息构成的虚拟世界里&#xff0c;IP地址作为每一个网络设备的独特标识&#xff0c;其重要性不言而喻。特别是独享静态IP&#xff0c;它不仅为用户提供了更加稳定、安全的网络…

美国加州正测试ChatGPT等生成式AI,在4大部门应用

5月11日&#xff0c;美联社消息&#xff0c;美国加州政府正在测试ChatGPT等生成式AI&#xff0c;应用在税收和收费管理部、交通部、公共卫生部以及卫生与公众服务部4大部门。 测试时间6个月&#xff0c;为其提供技术支持的一共有5家公司&#xff0c;分别是OpenAI、Anthropic、…

【北京迅为】《iTOP-3588开发板从零搭建ubuntu环境手册》-第2章 获取并安装Ubuntu操作系统

RK3588是一款低功耗、高性能的处理器&#xff0c;适用于基于arm的PC和Edge计算设备、个人移动互联网设备等数字多媒体应用&#xff0c;RK3588支持8K视频编解码&#xff0c;内置GPU可以完全兼容OpenGLES 1.1、2.0和3.2。RK3588引入了新一代完全基于硬件的最大4800万像素ISP&…

下载文件名称乱码或变成了随机码

如图 后端是有正常返回附件名称的,浏览器开发工具中也正常显示了这个数据,但是下载下来的文件名称确实一堆随机码. 其实这个问题的原因是因为跨域 查看console: Refused to get unsafe header "content-disposition" 现象,后端传递到前端的fileName不能被识别,下载…

Sass语法介绍-混合指令

08 【Sass语法介绍-混合指令】 1.前言 混合指令在 Sass 中也是一个比较常用的指令&#xff0c;在前面我们讲解的内容中有编写过混合指令 mixin &#xff0c;本节我们将详细讲解混合指令 mixin 的语法包括定义混合指令和引用混合指令等等&#xff0c;混合指令同样非常好用&…

期权隐含波动率到底是什么意思?

今天期权懂带你了解期权隐含波动率到底是什么意思&#xff1f;期权隐含波动率解析。通俗的说&#xff0c;期权隐含波动率是在期权市场中买家和卖家对于&#xff0c;某一期权合约价格变动幅度大小的判断。 期权隐含波动率到底是什么意思&#xff1f; 隐含波动率是根据期权市场价…

财务分析软件怎么选?看这篇就够了

怎么才能选到一款真正能够用于财务分析的软件&#xff1f;且是能够又快又直观地将财务数据情况分析清楚&#xff0c;从不同角度灵活分析财务数据背后的关联的软件&#xff0c;简单来说那得选一款BI财务分析软件。具体哪款BI财务分析软件更合适&#xff1f;那就要从以下几个方面…

Java 程序员必备的 15 个框架集

Java 程序员方向太多&#xff0c;且不说移动开发、大数据、区块链、人工智能这些&#xff0c;大部分 Java 程序员都是 Java Web/后端开发。那作为一名 Java Web 开发程序员必须需要熟悉哪些框架呢&#xff1f; d8f18202405131220599753.png 1.Spring 毫无疑问&#xff0c;Spri…

创建存储过程

查询语句 DDL CREATE TABLE student (id INT PRIMARY KEY AUTO_INCREMENT,createDate DATE NOT NULL,phone VARCHAR(20) NOT NULL,age INT NOT NULL,sex ENUM(男, 女) NOT NULL,introduce TEXT NOT NULL,userName VARCHAR(50) NOT NULL ); DML INSERT INTO student (create…

边缘计算安全有多重要

德迅云安全研究发现边缘安全是对存储或处理在网络边缘的数据的保护。边缘可以用不同的方式定义&#xff0c;但一般来说&#xff0c;它包括企业直接控制之外的任何设备或位置。这可能包括传感器、连接物联网的设备和移动设备。 边缘计算正在彻底改变商业运作方式。这引发了对边缘…

[数据集][目标检测]交通灯检测数据集VOC+YOLO格式2600张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2600 标注数量(xml文件个数)&#xff1a;2600 标注数量(txt文件个数)&#xff1a;2600 标注…

牛客热题:二叉树的前序遍历

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;二叉树的前序遍历题目链接方法一…

彩虹聚合DNS管理系统

聚合DNS管理系统可以实现在一个网站内管理多个平台的域名解析&#xff0c;目前已支持的域名平台有&#xff1a;阿里云、腾讯云、华为云、西部数码、CloudFlare。本系统支持多用户&#xff0c;每个用户可分配不同的域名解析权限&#xff1b;支持API接口&#xff0c;支持获取域名…

黑马程序员鸿蒙HarmonyOS端云一体化开发【13-15】

前置知识&#xff1a;arkts 一套开发工具&#xff0c;一套语言&#xff0c;搞定客户端和云端两个的编写。其中application就是客户端&#xff0c;cloudProgram就是云端。 开发人员->全栈开发工程师&#xff0c;降低了开发成本&#xff0c;且提供了很多现成的云服务&#xf…

游泳带什么防水耳机好?甄选四大顶尖游泳耳机推荐,最值入手!

在享受游泳的同时&#xff0c;搭配一款优秀的防水耳机&#xff0c;能够让您的游泳体验更加完美。然而&#xff0c;市面上琳琅满目的防水耳机品牌&#xff0c;让人难以选择。作为一名游泳爱好者&#xff0c;我深知选购一款合适的防水耳机的重要性。因此&#xff0c;我自费购买了…