用Python写了一个实时获取上证指数的利器

科技   2024-10-09 18:22   浙江  

Python获取实时股票数据利器

大家好,我是老表。今天的这篇文章,我将通过几行代码教大家如何实时获取上证指数、深证成指以及其他任意股票数据,并实现一些简单的自动化监控操作。

最近股市很火爆,从9月23日到昨天(7个工作日),上证指数从2735点涨到了3489点,涨幅惊人。

虽然我们不一定亲自下场参与,但市场数据还是要第一时间掌握。因此,今天我们来实现以下两个功能:

  • 实时获取股票数据并发送到邮箱;
  • 异常监控:当股票涨幅达到5%时,通过钉钉发出提醒。

下面,我会为大家详细讲解如何使用Python代码实现这些功能。希望能够帮助大家快速掌握实时监控股市数据的技巧!

一、准备工作

要实现实时获取股票数据,我们先要找哪里有这个数据。

方法: 浏览器搜索上证指数数据,随便点进一个金融相关网站,就可以看到相关数据了。

https://vip.stock.finance.sina.com.cn/mkt/

这个数据是实时变化的,说明页面一定一直在请求某个服务获取数据,通过F12调出开发者工具,很容易获取到数据请求接口:

https://hq.sinajs.cn/rn={timestamp}&list={','.join(stocks)}

rn 是时间戳,list 是要获取股票代码列表。

二、获取股票数据

经过前面分析,简单写一个 requests 请求,然后从返回结果中解析数据即可完成我们的第一个小目标。

先安装依赖:

pip install requests

下面是一个基本的获取上证指数和深证成指数据的代码示例:

import requests
import time
import re

def get_stock_data(stocks=["s_sh000001""s_sz399001"]):
    timestamp = int(time.time()*1000)
    headers = {
        "host""hq.sinajs.cn",
        "referer""https://vip.stock.finance.sina.com.cn/",
        "user-agent""Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36"
    }
    
    url = f"https://hq.sinajs.cn/rn={timestamp}&list={','.join(stocks)}"
    res = requests.get(url, headers=headers)
    parsed_data = []
    if "hq_str_s_sh000001" in res.text:
        # 从返回中解析数据
        pattern = re.compile(r'var hq_str_s_(\w+)="(.*?)";')
        matches = pattern.findall(res.text)
        
        for code, values in matches:
            values_list = values.split(',')
            parsed_data.append({
                'code': code,
                'name': values_list[0],
                'current_value': values_list[1],
                'change': values_list[2],
                'change_percent': values_list[3],
                'volume': values_list[4],
                'turnover': values_list[5]
            })
    return parsed_data

调用函数运行结果:

三、通过邮件发送股票数据

获取到股票数据后,我们可以将其发送到指定的邮箱,以便我们能实时查看。

这里我们通过Python的 yagmail 库发送邮件。

pip install yagmail

邮件发送代码:

from datetime import datetime

def get_date():
    # 获取当前时间
    current_time = datetime.now()
    
    # 获取当前的月、日、时、分、秒
    current_month = current_time.month
    current_day = current_time.day
    current_hour = current_time.hour
    current_minute = current_time.minute
    current_second = current_time.second
    return f"{current_month}-{current_day} {current_hour}:{current_minute}:{current_second}"

# 定义格式化股票数据内容的函数
def format_stock_data(data):
    formatted_content = ""
    for stock in data:
        name = stock['name']
        current_value = stock['current_value']
        change = float(stock['change'])  # 转换成浮点数便于比较
        change_percent = stock['change_percent']

        # 根据涨跌情况判断描述
        if change > 0:
            change_text = f"今日涨了 {change} 涨幅:{change_percent}%"
        else:
            change_text = f"今日跌了 {abs(change)} 跌幅:{change_percent}%"  # abs() 获取绝对值

        # 格式化为指定内容
        formatted_content += (
            f"{name} 当前点位: {current_value}{change_text}\n"
        )
    return formatted_content

# 定义邮件发送配置(请替换为你的真实配置)
class Config:
    user = "your_email@example.com"  # 发件人邮箱
    password = "your_password"  # 邮箱密码或授权码
    host = "smtp.example.com"  # 邮箱SMTP服务器

def all_send_email(config, user_name, email, data):
    # 连接邮箱
    yag = yagmail.SMTP(user=config.user, password=config.password, host=config.host)
    # 构建邮件内容
    contents = f"尊敬的{user_name}, 您好!\n\n以下是当前的股票数据:\n\n" \
               f"{format_stock_data(data)}\n" \
               f"数据更新时间:{get_date()}\n" \
               f"祝您生活顺利!\n\n此致,\n您的股票助手"
    # 发送邮件
    yag.send(email, f'{get_date()}上证指数数据', contents)

config = Config()
data = get_stock_data()
user_name = "简说Python"
email = "pythonbrief@163.com"  # 改成自己的邮箱
all_send_email(config, user_name, email, data)

效果图:

邮件正文:

四、设置异常监控并通过钉钉提醒

在股市中,及时获知股票的大幅波动非常重要。这里我们可以设置一个阈值,比如当涨幅达到5%时,自动通过钉钉发送提醒消息。

用Python搞了个基金查询机器人,还可以拓展!

如何打造一个能自动回复的钉钉机器人

如何用Python发送告警通知到钉钉?

这部分之前文章介绍过了,这里不重复介绍啦,如果有不懂的可以先阅读之前文章,然后找我交流,微信:pythonbrief,备注:公众号。

五、综合代码

将以上功能整合在一起,可以实现一个简单的监控系统。我们可以设置一个定时任务,让代码每隔一段时间执行一次,实现实时监控。

例如,可以使用time.sleep()函数实现简单的定时,或使用Python的定时任务调度库(如schedule)实现更专业的定时调度。

以 time 库为例子:

import time

def main():
    # 监控循环
    while True:
        # 获取股票数据并发送邮件
  config = Config()
        data = get_stock_data()
        user_name = "简说Python"
        email = "pythonbrief@163.com"  # 改成自己的邮箱
        all_send_email(config, user_name, email, data)
        # 每隔300秒(5分钟)运行一次
        time.sleep(300)

if __name__ == "__main__":
    main()

你还可以设置监控开始、截止时间等。

总结

本文我们使用Python实现了一个简单的股市实时数据获取和监控系统。主要内容包括实时获取上证指数和深证成指的数据,通过邮件发送股票数据到指定邮箱。

你还可以通过往期文章,实现在股票涨幅达到设定阈值时,通过钉钉机器人发送提醒。

以上代码只是一个基本框架,实际应用中可以根据需求进行优化,比如增加错误处理、数据持久化等功能。希望这篇文章能够帮助到对实时股票数据感兴趣的朋友们!

最后说一句:昨天3600,今天3200,恐怖如斯。。。围观数据可,切勿轻易入。

跟我一起学

本文我们扫下方二维码加我微信,发我一个1-10元红包,本文相关代码任意问。

星标公众号后,一起学习

免费围观朋友圈,发红包🧧随意问



简说Python
号主老表,自学,分享Python,SQL零基础入门、数据分析、数据挖掘、机器学习优质文章以及学习经验。
 最新文章