Python即时获取上证指数信息并发送邮件到指定邮箱

最近股市振荡,股民会时不时查看一下上证指数信息,但是繁忙的工作却时不是让人忘记了,错过了投资的最佳时机,这时就可以通过Python来爬取网站上的上证指数,并发送到指定的邮箱,这样就不用上指定网页也以获取最新的信息。

本文中,我将带你一步步实现一个小程序——通过网上财经网站的接口获取上证指数的实时数据,并将这些信息通过邮件发送到你指定的邮箱。这一切都可以通过 Python 来实现,简单高效,适合任何有基本编程基础的朋友。接下来让我们看看具体的实现步骤吧。

第一步:安装所需的库

在我们开始编写代码之前,需要安装两个关键的 Python 库:

requests:用于获取上证指数数据。

yagmail:用来发送邮件。

如果你还没有这些库,可以通过以下命令来安装它们:

pip install requests yagmail

简单来说,requests 是我们抓取网页数据的好帮手,而 yagmail 则是一个轻量级的邮件发送工具,免去繁琐的配置步骤,几行代码就能发邮件。

第二步:获取上证指数的实时数据

为了获取上证指数的最新行情,我们可以利用新浪财经提供的免费 API。该接口能够以非常高的速度返回上证指数的实时数据。下面是获取数据的核心代码:

import requests
import time
import redef get_stock_data(stocks):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)# 使用正则表达式解析返回的数据pattern = re.compile(r'var hq_str_s_(\w+)="(.*?)";')matches = pattern.findall(res.text)parsed_data = []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]})return parsed_data

在这段代码中,我们通过 requests 库向新浪财经发送一个请求,并将返回的数据解析成易读的格式。关键在于用正则表达式提取我们需要的信息,比如上证指数的名称、当前点位、涨跌幅度等。

第三步:格式化股票数据

获取数据之后,接下来需要将它转化为一个更容易理解、便于阅读的文本格式。这一步可以帮助我们将数据发送给用户时更加清晰明了:

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}%"formatted_content += f"{name} 当前点位: {current_value},{change_text}\n"return formatted_content

通过 format_stock_data 函数,我们将提取到的股票信息格式化为简洁的文本。比如,我们会将上证指数的点位、涨跌幅度显示出来,并且根据涨跌情况,适当调整描述的措辞。格式化的文本如下:

格式化后的文本

第四步:获取邮箱信息

为了能够成功发送邮件,我们需要得到邮箱的地址、用户名和授权密码。这里以126信箱为例,你需要进入你的126信箱,在顶部的【设置】下拉菜单中找到

找到POP3/SMTP/IMAP

点击【新增授权密码】这里一个授权密码有效期是180天,过期还需要重新申请,普通用户可以设置2个授权密码。

申请授权密码

在弹出的对话框中手机扫描二维码向绑定的手机号发送短信(按运营商规定收费),然后点击【已发送邮件】通过验证。然后就可以得到一个授权码,注意一定要保存好,因为它不会重复显示。

发送邮件

第五步:发送邮件

最后,我们使用 yagmail 库将处理好的股票数据发送到指定的邮箱。这个库的好处在于它非常易用,只需要简单配置就可以发送邮件。以下是邮件发送的代码:

import yagmail
from datetime import datetimedef send_email(user_name, recipient_email, stock_data):yag = yagmail.SMTP(user="你的邮箱地址", password="你的邮箱授权密码", host="邮箱所在smtp如:smtp.126.com") #这里输入邮箱# 定义邮件的内容contents = (f"尊敬的{user_name}, 您好!\n\n"f"以下是当前的股票数据:\n\n{stock_data}\n"f"数据更新时间:{datetime.now().strftime('%m-%d %H:%M:%S')}\n"f"祝您生活愉快!\n\n此致,\n您的股票助手")# 发送邮件yag.send(recipient_email, f'上证指数最新数据 - {datetime.now().strftime("%m-%d %H:%M:%S")}', contents)

在这里,我们使用 yagmail.SMTP 建立了与 SMTP 服务器的连接,然后构建邮件内容,最后通过 yag.send() 将邮件发送给目标用户。

你只需要替换代码中的 你的邮箱地址 和 你的邮箱密码 为你的真实信息,即可实现自动化发送邮件的功能。

第六步:整理合所有代码

采用类的写法,整合所有代码,我们可以得到发送上证指数信息的一个完整的小程序:

from datetime import datetime
import requests
import re
import yagmail
import timedef get_stock_data(stocks):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 = []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]})return parsed_datadef 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}%"formatted_content += f"{name} 当前点位: {current_value},{change_text}\n"return formatted_contentdef send_email(user_name, recipient_email, stock_data):yag = yagmail.SMTP(user="你的邮箱地址", password="你的邮箱密码", host="smtp.126.com")contents = (f"尊敬的{user_name}, 您好!\n\n"f"以下是当前的股票数据:\n\n{stock_data}\n"f"数据更新时间:{datetime.now().strftime('%m-%d %H:%M:%S')}\n"f"祝您生活愉快!\n\n此致,\n您的股票助手")yag.send(recipient_email, f'上证指数最新数据 - {datetime.now().strftime("%m-%d %H:%M:%S")}', contents)if __name__ == "__main__":stocks = ["s_sh000001"]  # 上证指数代码stock_data = get_stock_data(stocks)formatted_data = format_stock_data(stock_data)send_email("Gordon", "403096966@qq.com", formatted_data)

学后总结

后续,在此基础上,我们可以把程序架设在vps上,设置定期执行发送邮件的计划任务,这样我们就可以通过邮件即时获取上证指数信息。

未来,还可以改进代码,做成一个UI界面,批量获取网上的每日一句,定时发送到指定的邮箱,帮助自己学习英语等等。

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

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

相关文章

2024最新分别利用sklearn和Numpy实现c均值对鸢尾花数据集进行聚类(附完整代码和注释)

C均值聚类算法(K-Means Clustering)是一种非常流行的聚类算法,用于将数据点分成多个簇,使得簇内的点尽可能相似,簇间的点尽可能不同。以下是K-Means算法的基本步骤: 1. 初始化:随机选择K个点作…

网络断开导致SSH会话和服务端任务终止的原因及使用screen详解

在进行深度学习任务时,常常在本地通过ssh连接远程服务器进行炼丹任务。当我在pycharm上远程连接到服务器上进行训练时,由于网络不稳定使得SSH断开连接,我原以为服务器不会受影响。通过nvidia-smi命令发现GPU占用为0,这才发现任务终…

稀土阻燃协效剂 - 阻燃

金士镧稀土阻燃协效剂的技术衬垫: 金士镧KingCela 稀土阻燃协效剂KCL-FR-06xx系列产品,凭借独特的稀土4f电子层结构, 可协效磷氮阻燃剂,卤系阻燃剂阻燃剂在高分子材料(橡胶,塑料,涂层,胶黏剂&a…

『网络游戏』服务器启动逻辑【16】

新建Visual Studio工程命名为NetGameServer 重命名为ServerStart.cs 创建脚本: 编写脚本:ServerRoot.cs 编写脚本:ServerStart.cs 新建文件夹 调整脚本位置 新建文件夹 新建文件夹网络服务 创建脚本:NetSvc.cs 编写脚本&#xff1…

使用 KVM 在 Xubuntu 上创建 Windows 10 虚拟机

目录 前言说明注意准备 iso官网思博主(嘻嘻)拖动到虚拟机里面启动 virt-manager创建虚拟机选择本地安装介质选择 iso配置 内存 和 CPU选择 创建的虚拟机 保存的位置启动虚拟机看到熟悉的 Win10界面前言 XUbuntu安装OpenSSH远程连接服务器 远程连接之MobaXterm安装使用 虚拟化技…

DS线性表之队列的讲解和实现(5)

文章目录 前言一、队列的概念及结构二、队列的实现队列节点和队列初始化销毁判断是否为空入队列出队列获取队头队尾数据获取队列元素个数 三、实际使用效果总结 前言 队列实现源代码   队列是我们遇到的第二个实用数据结构,栈和队列地位等同 一、队列的概念及结构…

一篇python常见的Pandas的数据功能的使用

当我们学习了如何使用 Pandas 进行数据的导入与导出,这为我们后续的数据处理打下了基础.此次我们将重点讨论数据选择与过滤.通过掌握这一部分的知识,你将能够轻松地从复杂的数据集中提取出所需的信息.接下来,我们将通过一些实例来逐步了解这些操作. 这里插播一条粉丝福利&#…

前端技巧汇总

保持盒子在中间位置&#xff1a; 中间盒子设置位绝对定位 上下左右都设置为0 margin为auto中间 <!doctype html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width,…

三、AOP

文章目录 1. AOP&#xff08;概念&#xff09;2. AOP&#xff08;底层原理&#xff09;2.1 AOP 底层使用动态代理2.2 AOP&#xff08;JDK动态代理&#xff09; 3. AOP&#xff08;术语&#xff09;3.1 连接点3.2 切入点3.3 通知&#xff08;增强&#xff09;3.4 切面 4. AOP操作…

Element中el-table组件设置max-height右侧出现空白列的解决方法

之前就出现过这个情况&#xff0c;没理过&#xff0c;因为不影响啥除了不美观...但今天看着实在是难受&#xff0c;怎么都不顺眼(可能是我自己烦躁--) 试了很多网上的方法&#xff0c;都不得行&#xff0c;后面发现了这篇文章&#xff0c;解决了! 感谢&#xff01; Element中t…

深度学习:生成对抗网络(Generative Adversarial Network, GAN)

生成对抗网络&#xff08;Generative Adversarial Network, GAN&#xff09; 生成对抗网络&#xff08;GAN&#xff09;是一种深度学习模型&#xff0c;最初由Ian Goodfellow于2014年提出。这种模型框架通过让两个神经网络——生成器&#xff08;Generator&#xff09;和判别器…

SpringBoot人事系统:企业人才资源的智能管家

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…

fastadmin 多商户模式下侧边栏跳转路径BUG

记录&#xff1a;仅作自己项目记录&#xff0c;在一个域名下部署多套项目时&#xff0c;若是多商户模式项目会出现跳转路径问题。 修改 \manystore\library\Auth.php 文件的 getSidebar 方法 // 1 改为&#xff1a; $v[url] isset($v[url]) && $v[url] ? $v[url] :…

霍尼C200系统CC-TUIO31通用输入输出模块电厂用

霍尼C200系统CC-TUIO31通用输入输出模块电厂用,CC-TUIO31技术参数,CC-TUIO31说明书,霍尼韦尔官网,霍尼韦尔代理商,Honeywell官网,Honeywell代理商, gnote: , titlecolor: , description: 易于维护&#xff1a;模块化设计&#xff0c;便于安装、维护和更换&#xff0c;减少停机时…

JavaSE

线程 1. 区分程序、进程、线程 程序&#xff1a;为实现某种功能&#xff0c;使用计算机语言编写的一系列指令的集合。 进程&#xff1a;是运行中的程序&#xff08;如运行中的原神&#xff09;进程是操作系统进行资源分配的最小单位。 线程&#xff1a;进程可以进一步细化为线…

斯坦福UE4 C++课学习补充25:AI感知组件

文章目录 一、引入感知组件并绑定委托二、优化角色旋转 一、引入感知组件并绑定委托 PawnSensingComponent是UE中用于感知其他 Pawn&#xff08;或 Actor&#xff09;存在的一个组件&#xff0c;常用于 AI 角色的视觉、听觉等感知功能。它为 AI 提供了基础的感知能力&#xff…

关于WPF(Windows Presentation Foundation)中Grid控件

本文将从Grid控件的基础概念开始&#xff0c;逐步深入探讨其特性、用法、实例代码&#xff0c;以及最佳实践。 1. WPF和布局简介 WPF是一种用于构建Windows桌面应用程序的UI框架&#xff0c;它通过XAML&#xff08;Extensible Application Markup Language&#xff09;使开…

PDF编辑不求人!4款高效工具,内容修改从此变得简单又快捷

咱们现在生活在一个数字时代&#xff0c;PDF文件可不就是工作、学习还有日常生活中经常要用的东西嘛。但遇到那些需要改动的PDF文件&#xff0c;是不是就觉得有点头疼啊&#xff1f; 因为传统的PDF文件真的不好编辑&#xff0c;这确实挺烦人的。不过呢&#xff0c;我今天要给你…

文本语义检索系统的搭建过程,涵盖了召回、排序以及Milvus召回系统、短视频推荐等相关内容

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下本文详细介绍了文本语义检索系统的搭建过程&#xff0c;涵盖了召回、排序以及Milvus召回系统的相关内容。通过使用PyTorch框架&#xff0c;我们提供了样例代码&#xff0c;以帮助读者更好地理解和实践。该系统具有广…

systemd实现seatunnel自动化启停

在 systemd 中,您可以通过配置服务单元文件来设置服务在失败或退出后自动重启。这对于确保关键服务在意外退出时能够自动恢复运行非常有用。下面是实现 systemd 自动重启服务的步骤: 通用操作 1. 创建或编辑服务单元文件 假设服务单元文件位于 /etc/systemd/system/my-ser…