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,一经查实,立即删除!

相关文章

网络断开导致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 进行数据的导入与导出,这为我们后续的数据处理打下了基础.此次我们将重点讨论数据选择与过滤.通过掌握这一部分的知识,你将能够轻松地从复杂的数据集中提取出所需的信息.接下来,我们将通过一些实例来逐步了解这些操作. 这里插播一条粉丝福利&#…

三、AOP

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

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

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

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

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

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

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

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

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

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

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

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

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

VR全景摄影的拍摄和编辑软件推荐

随着虚拟现实技术的不断进步,VR全景摄影逐渐成为商业、娱乐和教育等多个领域中的重要工具。通过专业的设备与软件,摄影师能够创作出沉浸式的360度全景作品,为观众提供身临其境的视觉体验。在这篇文章中,我们将介绍VR全景摄影的相关…

【vue+printJs】前端打印, 自定义字体大小, 自定义样式, 封装共享样式

效果示例 思维导图 目录 1,基本使用1, 依赖下载2, 页面导入3, 修改字体大小(可行但不推荐) 2, 自定义样式,字体大小1, 修改字体大小(推荐)2, 自定义样式3, 封装共享样式 3, 去除页面页脚内容4, 测试案例demo, 直接cv可用5, print-js的其他参数说明 1,基本使用 1, 依赖下载 …

MyBatis-Plus 之 typeHandler 的使用

一、typeHandler 的使用 1、存储json格式字段 如果字段需要存储为json格式,可以使用JacksonTypeHandler处理器。使用方式非常简单,如下所示: 在domain实体类里面要加上,两个注解 TableName(autoResultMap true) 表示自动…

无人驾驶打造“新丝路”,驭势科技在卡塔尔设立研发运营中心

在卡塔尔多哈的街头,除了身穿阿拉伯长袍的人群和悠闲的骆驼队伍之外,又将出现一道全新的风景线,那就是来自驭势科技的无人驾驶车。10月8日,在中关村京港澳青年创新创业中心的协助与对接下,驭势科技在卡塔尔科技园正式成…

<Project-8.1.1 pdf2tx-mm> Python 调用 ChatGPT API 翻译PDF内容 历程心得

原因 用ZhipuAI,测试用的PDF里,有国名西部省穆斯林,翻译结果返回 “系统检测到输入或生成内容可能包含不安全或敏感内容,请您避免输入易产生敏感内容的提 示语,感谢您的配合” 。想过先替换掉省名、民族名等&#xff…

计量校准工作中的误差评定与不确定度

计量校准的目的是确定测量仪器的误差和不确定度,以评估其测量结果的可靠性。误差评定和不确定度计算是计量校准过程中的重要步骤。 误差评定是指通过比较测量仪器的测量结果与已知标准值之间的差异,确定仪器的准确性和精度。误差可以分为系统误差和随机误…

【Java】I/O 操作详解

📃个人主页:island1314 ⛺️ 欢迎关注:👍点赞 👂🏽留言 😍收藏 💞 💞 💞 目录 1. 引言 🚀 2. File 类 📕 2.1 创建 File 对象 …