(办公自动化)让我看看谁还没完成青年大学习------基于requests和yagmail库实现的查询安徽省青年大学习学习情况和邮件自动提醒功能
一、写代码的初衷
作为一名团支书,青年大学习每更新一期就需要提醒班级同学去学习。辅导员总是要求定时查看谁没有完成青年大学习,并提醒该同学。每一次查找谁没有完成青年大学习都令我非常痛苦,我需要对着名单手动比对,找出没有完成青年大学习的同学。于是,下定决心,整一个程序,让我能解放双手!说干就干!
二、前期准备
1.使用的第三方库准备
本代码主要使用了四个库, requests、pandas 、yagmail、time。前三个没有的需要自行安装,最后一个是自带的库。下面附上安装库的代码,在pycharm的terminal窗口输入下面指令就可以下载库啦!!
pip install requests
pip install pandas
pip install yagmail
2.比对数据准备
因为需要找出谁没有完成青年大学习,那么自然少不了比对的那个文件啦。当然,我们还需要实现自动发送邮件的功能,所以文件里面还需要包含邮箱号。因为我使用的是发送到他们的qq邮箱,所以我那个文件里面一共有两列,第一列是【姓名】字段存放班级同学的姓名,第二列是【QQ】字段,存放他们的QQ。至于他们的qq邮箱嘛,后期通过处理,在【QQ】的字段的基础上,自动给他们加上“@qq.com”字段,反正代码搞,咱也省事。
3.网页准备
我也是摸索了挺久的,最后是通过vx复制连接,在Edge浏览器中打开,然后用检查工具,分析里面的页面,最终确定了改代码的url。不过,这个url我们是打不开的,但是交给代码,代码却可以噢。(因为我是安徽滴,所以这个下面的是安徽滴青年大学习数据的网址,其他省份的需要自行更换各自省份的网址。但是不能保证代码通用吼,因为不同的省份可能网页获取的json数据不一样)下面附上的连接:
url = "http://dxx.ahyouth.org.cn/api/peopleRankStage?"
三、说干就干-----这就开整
1、首先导入需要使用的包
import requests import pandas as pd import yagmail import time
2、校对数据准备
# 校对数据准备 #这是一个只有两列的表,第一列是姓名,第二列是姓名对应的QQ号码 data = pd.read_excel(r"这里替换你前期数据准备的excel表") names = data["姓名"] #将姓名列转换为列表格式 names_list = list(names) #将QQ列的每一个数据加上邮箱的后缀,并存放在邮箱的列表里 email = [str(qq)+'@qq.com' for qq in data["QQ"]] # 姓名和邮箱打包,生成检索名字得到邮箱的字典 key_value = list(zip(names_list,email)) dic = {} for name,email in key_value: dic[name] = email
3.青年大学习数据的获取
# 网络爬取 url = "http://dxx.ahyouth.org.cn/api/peopleRankStage?" headers = { #这里设置你自己的UA } # 安徽的应该都知道,查看青年大学习的时候需要做的一些选项找到对应的班级 params = { #table_name自己设置,我这个设置的是2022年第21期对应的表名。根据我的研究,每更新一期,最新的一期最后的尾数加2.比如2022年第20期是reason_stage213,如果第22期更新了的话,那么22期应该是reason_stage217,以此类推 'table_name': 'reason_stage215', 'level1': '直属高校',#这个你也可以换成其他的,根据需求来 'level2': 'xx大学', 'level3': 'xx学院', 'level4': 'xx团支部'#换成你自己的班级 } #开始爬了 res = requests.get(url=url,headers=headers,params=params) time.sleep(5) #这里停顿5s是因为爬虫会攻击服务器,防止自己的ip被封 #因为这个网页是动态网页,会更新数据,所以提取json包 result = res.json() msg_tag = result['list']['list'] # 完成人员名单 finished_name = [name_tag['username'] for name_tag in msg_tag] # 未完成人员名单 unfinish_list = [name for name in names if name not in finished_name] unfinish_email_list = [dic[name] for name in unfinish_list if name in dic.keys()] for name in unfinish_list: print("青年大学习未完成名单:",name)
保姆级教程:(1)如何获得自己的UA?
打开你的浏览器--网页上随便一个位置点击右键--点击检查---然后会打开下面这个窗口,按照这个步骤得到自己的UA
保姆级教程:(2)关于代码里面的params
level1:
选择你要查询的团支部类别,然后你打到代码里面,比如我选择“直属高校”,你也可以选其他的,你想要查什么,你就在代码的level1里面输入,前提是安徽省青年大学习查询的那个页面得有才可以噢!
table_name:
我以直属高校的为例,下面选择你要查询的期数,所谓期数就是代码里面的table_name,代码段里面也举了例子说明查哪期输入啥,这里就不再赘述。
level2:
我以直属高校的为例,level2对应的是你要查询的高校,代码里面输入你要查的安徽高校的名称
level3:
我以直属高校的为例,level3对应的是你要查询的高校的学院,代码里面输入你要查的安徽高校的学院名称---必须xx学院的全称吼,不带学校名字的,比如计算机科学与工程学院
level4:
我以直属高校的为例,level4输入团支部的全称【不需要带学校学院】。
4.邮件发送部分
#自动发送邮件部分 print("正在发送邮件...") # 邮件发送 yag = yagmail.SMTP(user='你自己的qq邮箱', password='你的smtp服务的密码', host='smtp.qq.com') yag.send( to=unfinish_email_list, subject='尽快完成青年大学习提醒', contents=['同学,你的青年大学习还没有完成噢,看到邮件就快去完成吧!','----------本邮件为自动发送'] ) print("邮件发送成功!")
保姆级教程:(3)smtp服务的密码怎么获得?
打开qq邮箱---找到设置---账号---POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务---框起来的俩都开启
开启后,会有一个界面,按照步骤操作,会的到一个授权码,授权码涉及隐私,我就打码了。把授权码复制了粘贴到代码中password里面就可以啦
你也可以使用其他的邮箱,如果你使用其他得邮箱得话就需要改代码里面得的host,把中间的qq换成其他邮箱,比如163邮箱,你就换成host='smtp.163.com'.
四、总结
实现了查找未完成青年大学习的同学和自动发送邮件提醒的功能,但是不足之处是没有封装成都能通用的程序,仍然还需要进行手动调参。
使用效果如下:
最后的最后,码字不易,希望能够有所帮助!!!祝大家生活愉快啦!!!
————————————————
版权声明:本文为CSDN博主「冰淇淋加点糖」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_56559434/article/details/127159825
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix