当前位置: 首页 > news >正文

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.mrgr.cn/news/47315.html

相关文章:

  • Linux练习
  • net-http-transport 引发的句柄数(协程)泄漏问题
  • 不同音频振幅dBFS计算方法
  • 【面试题】简单聊一下什么是云原生、什么是k8s、容器,容器与虚机相比优势
  • 了解Node.js
  • 极狐GitLab 正式发布安全版本17.7.1、17.6.3、17.5.5
  • 【大模型开发】AI提示词框架:解锁ICIO、CRISPE、BROKE和RASCEF的强大潜力
  • 代码随想录打卡Day58
  • 【数据结构】6道经典链表面试题
  • VBA即用型代码手册:将工作表复制到已关闭的工作簿
  • 腾讯云License 相关
  • 数据结构-二叉树_堆
  • jni,java,c
  • 等保测评中的安全事件管理与报告机制
  • mysql数据备份
  • 从FastBEV来学习如何做PTQ以及量化
  • python 常用关键字
  • 【LLM论文日更】| BGE-M3E embedding模型
  • Linux查看下nginx及使用的配置文件
  • 南京中医药大学与和鲸科技签署101数智领航计划,加速“医学+人工智能”交叉学科人才培养
  • Linux中perf的使用
  • redistemplate实现点赞相关功能
  • os模块简介
  • Chromium 中前端HTMLDialogElement <Dialog> c++代码实现
  • 锐明技术Mangrove系统 任意用户创建漏洞复现
  • 如何做好项目管理中的需求管理?