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%时,自动通过钉钉发送提醒消息。
这部分之前文章介绍过了,这里不重复介绍啦,如果有不懂的可以先阅读之前文章,然后找我交流,微信: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元红包,本文相关代码任意问。
免费围观朋友圈,发红包🧧随意问