1、爬取对象:百度天气

2、天气解析

3、整理内容

4、发送对象,获取SMTP发送授权码

5、脚本完成

6、加入windows的任务计划程序,或者linux的crontab周期性任务设置

# -*- coding:utf-8 -*-import json
import random
import re
import timeimport requests
import yagmail
from bs4 import BeautifulSoupurl = 'https://weathernew.pae.baidu.com/weathernew/pc?srcid=4982&query='
s_url = 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd='
user = 'king917619381@vip.qq.com'
password = 'xxxx授权码'
allProvince = ['河北', '山西', '辽宁', '吉林', '黑龙江', '江苏', '浙江', '安徽', '福建', '江西', '山东', '河南', '湖北','湖南', '广东', '海南', '四川', '贵州', '云南', '陕西', '甘肃', '青海', '台湾', '内蒙古', '北京', '天津','上海', '广西', '西藏', '重庆', '宁夏', '新疆', '香港', '澳门', '台湾']# try:
#     print('请您搜索:湖北黄冈天气(省+市+天气,应省去省市后缀)!')
#     input_first = input('请输入您的城市:')
#     if input_first[:2] in allProvince or input_first[:3] in ['黑龙江', '内蒙古']:
#         input_first = input_first
#     else:
#         input_first = '湖北武穴天气'
# finally:
#     passdef get_real_weather(new_url, num=None):"""获取实时天气:param new_url::param num:获取最近多少天的天气,后面几天的天气将从weather15DayData列表里获取:return:"""headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 Chrome/103.0.0.0 Safari/537.36'}r = requests.get(new_url, headers=headers)soup = BeautifulSoup(r.text, 'lxml').findAll('script')# var_soup[5],获取当前日期具体气候状况global simple_text, after_weatherweather = re.findall(r'data\["weather"]=(.+)', str(soup[5]))weather = json.loads(weather[0].replace(';', ''))base = re.findall(r'data\["base"]=(.+);', str(soup[5]))base = json.loads(base[0])date = base['date']  # 当前日期weekday = base['weekday']  # 当前星期几lunar = base['lunar']  # 农历多少feature = re.findall(r'data\["feature"]=(.+);', str(soup[5]))feature = json.loads(feature[0])sunriseTime = feature['sunriseTime']  # 日出时间sunsetTime = feature['sunsetTime']  # 日落时间weather15DayData = re.findall(r'data\["weather15DayData"]=(.+);', str(soup[5]))weather15DayData = json.loads(weather15DayData[0])if num and int(num) < 15:# 获取明后天天气字典after_weather = []for i in range(int(num)):w_date = weather15DayData[i + 1]['date']  # 日期formatWeek = weather15DayData[i + 1]['formatWeek']  # 属于哪一天:今明后if i + 1 == int(num):weatherPm25 = weather15DayData[i + 1]['weatherPm25'] + '。\n\n\n'  # pm空气质量else:weatherPm25 = weather15DayData[i + 1]['weatherPm25'] + ','  # pm空气质量weatherText = weather15DayData[i + 1]['weatherText']  # 天气情况after_weather.append(w_date + ' ' + formatWeek + '天气:' + weatherText + ' 空气质量' + weatherPm25)else:only_date = weather15DayData[1]['date']  # 日期only_formatWeek = weather15DayData[1]['formatWeek']  # 属于哪一天:今明后only_weatherPm25 = weather15DayData[1]['weatherPm25'] + '。'  # pm空气质量only_weatherText = weather15DayData[1]['weatherText']  # 天气情况simple_text = '日期' + only_date + ' ' + only_formatWeek + '天气:' + only_weatherText + ' 空气质量' + only_weatherPm25# print(simple_text)temperature_night = weather['temperature_night']  # 晚间温度temperature_day = weather['temperature_day']  # 白天温度weather_day = weather['weather_day']  # 白天天气wind_direction_day = weather['wind_direction_day']  # 风向趋势wind_power_day = weather['wind_power_day']  # 白天风力等级temperature = weather['temperature']  # 当前气温是多少real_weather = weather['weather']  # 当前天气wind_direction = weather['wind_direction']  # 当前风向wind_power = weather['wind_power']  # 当前风力humidity = weather['humidity']  # 空气湿度uv = weather['uv']  # 紫外线强弱todayContent = f'{locate[:-2]}\n' \f'{date} {weekday} 农历:{lunar},当前气温为:{temperature}°\n' \f'湿度{humidity}%,紫外线{uv},日出{sunriseTime},日落{sunsetTime}\n' \f'总体来说,今天:{weather_day},{temperature_night}°~{temperature_day}℃ {wind_direction_day}{wind_power_day}\n' \f'实时:{real_weather} {wind_direction}{wind_power}\n'return todayContent + '\n介天是:\n' + simple_text if not num else todayContent + '\n后面几天:\n' + '\n'.join(text for text in after_weather)  # + '。\n'# print(f'打印完成,内容为:\n{weather}')# print(weather15DayData)def search_weather():res = requests.get(simple_url, headers=headers)print(res.text)  # No result we want.def send_mail(weather_get):# 连接邮箱服务器,smtp里password输入的是授权码yag = yagmail.SMTP(user=user, password=password, host='smtp.qq.com')  # smtp.qq.comif isinstance(weather_get, list):weather_get.append('\n\n作者:HuZk')# return 'pm is shayu de shoubi.'# 发送带附件的邮件,最后1个参数为附件地址# 接收邮件的邮箱和附件地址可以为列表,即发送给多个邮箱,发送多个附件receive_address = ['917619381@qq.com'] # 多个收件地址try:yag.send(receive_address, '天气定制_专属', weather_get, [r"C:\Users\Administrator\Pictures\无非动心.jpeg"])finally:passreturn '您的心意发送完成,对方已成功接收!'# if True:#     yag.send(receive_address, '亲爱的,请收下您的天气!', contents, [r"C:\Users\Administrator\Pictures\无非动心.jpeg"])def run():input_first = None  # 我的家乡:湖北黄冈天气global locateif input_first:locate = input_firstelse:locate = '广东深圳天气'new_url = url + locate# simple_url = s_url + locate# 控制查询地:locate →  new_url → out_contentinput_num = '3'  # 展示未来几天的天气,默认3天content = get_real_weather(new_url, input_num)# 再加个地址,展示该地址天气locate = '湖北武穴天气'another_url = url + locatesecond_content = get_real_weather(another_url, input_num)print(f'check ready-contents:{[content, second_content]=}')# 天气内容获取完毕,现在来发送邮件print(send_mail([content, second_content]))run()

点击Sublime Text的插件F5调试,或者pycharm的运行,发送成功!

以后你喜欢的、敬重的人每天都能收到你的关切和推送了!快去试一下吧!

【感恩节的小礼物】yagmail给家人朋友来一份含有温情的关心和推送吧~Python3自动发送暖心内容邮件。相关推荐

  1. 关于计算机的小故事英语,感恩节的小故事_关于感恩节的小故事【英文】-太平洋电脑网...

    想知道感恩节英文小故事吗?来这里看看,太平洋电脑网下面就为大家介绍下一个感恩节英文小故事.需要的朋友可以参考下. The Grateful Mouse 感恩的老鼠 A lion was sleepin ...

  2. 微信公众号发送小程序卡片_微信公众号将能够直接给用户推送小程序卡片,社交电商开始发力...

    公众号或能在对话框中直接给粉丝推送小程序卡片了,这个功能似乎正在灰度测试中. 微信公众号将能够直接给用户推送小程序卡片,社交电商开始发力 一直以来,微信公众号和微信小程序一直是腾讯基于微信生态的两款明 ...

  3. 微信小程序一次获取多个formid插件,实现主动推送多次消息

    微信小程序一次获取多个formid 微信小程序一次获取多个formid插件,实现主动推送多次消息 版本号:1.0.0 作者:chen-yt github: https://github.com/che ...

  4. 熊掌号历史php推送示例,百度熊掌号历史数据内容API提交URL整理小技巧

    原标题:百度熊掌号历史数据内容API提交URL整理小技巧 最近一直在关注有关网站百度熊掌号方面研究,从熊掌号的开通到,百度熊掌号H5页面改造,百度熊掌号的运营,到现在算是有一个全方位的认知,未来百度熊 ...

  5. 小程序用户操作后通过公众号(服务号)推送通知

    因项目需要做推送服务.小程序推送太多限制.因此,改为服务号通知. 首先,公众号回调地址在另外的服务器上,获取不到.所以采用的思路是,获取全部用户的openid,存入数据库.(之后做定时,获取新增用户. ...

  6. 失物招领小程序_在机场丢了东西怎么办?温州机场失物招领在线办理平台暖心上线!...

    为加快智慧机场建设,纵深推进"最多跑一次"改革,温州龙湾国际机场于近日推出温州机场失物招领在线办理平台,通过智慧化程序改变传统线下认领模式,有效畅通遗失物品发布和查询的信息通道,提 ...

  7. 感恩节QAD带你“吃鸡”

    如果用一种颜色来形容11月,会是什么颜色? 我会说是金色! 因为落叶是金色的,在寒冬中那一缕微弱的阳光是金色的,还有今天的感恩节也是金色的. 说到感恩节,小编最先想到的就是火鸡.吃火鸡的习俗从二十世纪 ...

  8. 用hundred造句子_2020朋友圈感恩节祝福语大全:微信感恩节鞠躬的图片文案句子说说[多图]...

    2020感恩节即将到来,在感恩节之际大家可以在朋友圈发文字说说,或者给亲朋好友发送祝福语,不知道发什么文字的用户,小编在下面给大家准备了很多祝福语文案,可以参照下方的句子发表说说,还有感恩节的鞠躬图片 ...

  9. nodejs android 推送,利用Nodejs怎么实现一个微信小程序消息推送功能

    利用Nodejs怎么实现一个微信小程序消息推送功能 发布时间:2021-01-20 13:55:29 来源:亿速云 阅读:92 作者:Leah 今天就跟大家聊聊有关利用Nodejs怎么实现一个微信小程 ...

  10. 小天才被限定使用时长的应用_家庭腕上社交新场景,OPPO Watch、小天才开启暖心联动...

    说到小天才手表,相信家长朋友们都或多或少的听说过,或者正在给孩子使用.可爱的造型和实用的功能还有亲民的价格,让小天才手表成为青少年智能穿戴领域的热门产品.特别是对于正在上幼儿园和小学阶段的小朋友来说, ...

最新文章

  1. struts2中改变struts.xml默认路径
  2. echarts 词云_python Flask+爬虫制作股票查询、历史数据、股评词云网页
  3. [vue] 说说你对vue的extend(构造器)的理解,它主要是用来做什么的?
  4. linux中shell编写数组排序,linux bash shell实现对数组快速排序(升序)
  5. Extracting Text From Image
  6. 前端笔记-vue cli中v-bind动态数据实时更新
  7. 挑战NPC(洛谷-P4258)
  8. softmax实现多分类算法推导及代码实现
  9. php安装redis扩展‘checking for igbinary includes... configure: error: Cannot find igbinary.h‘解决方法
  10. webStrorm js文件里 怎么去掉参数的下划线
  11. 图灵5月书讯※特别制作【MongoDB将在5月中旬隆重上市】
  12. 卸载安装Ubuntu18.04双系统、ROS+装机
  13. 短信验证码接收不到原因分析和解决方案分析
  14. 强不知以为知 怎能善其事
  15. 转:无视苹果 Adobe欲将Flash推广到iPhone
  16. Maven的学习总结
  17. 编程的同时还能盯股票基金?VSCode这款神器插件绝了!
  18. 多易教育KAFKA实战(1)-KAFKA集群安装和shell客户端
  19. ORB-SLAM2 --- KeyFrame::AddConnection函数
  20. 交叉编译工具链使用提示No such file or directory

热门文章

  1. Mathematica 取整函数
  2. unity学习笔记-换装系统
  3. 解决Sheet can not be presented because the view is not in a window这样的问题
  4. Eclipse 查看类继承和实现关系(包括子类)
  5. 编程英语:triggered(触发,引起)
  6. 《Flutter实战》开源电子书
  7. 编译Linux内核4.4实现可读NTFS
  8. Springboot集成rabbitmq
  9. php面向对象常见的专业术语
  10. 赫兹的单位换算_赫兹单位换算(赫兹的单位换算公式)