Python 开机自动发送天气预报和每日一句邮件
前言
程序员给人们的第一印象是每天穿格子衫、包头卫衣的宅男,为人很耿直,没有幽默感,不会与人相处。久而久之,连程序员自己也这样认为自己。虽然因为工作的特殊性,缺少女性朋友,交流机会少,以至于大部分程序员都是单身。但程序员并不是都非常的呆板,即使工作繁忙,但是对于生活细节还是会非常在意,运用自己所学知识,为生活带来新鲜感。
今天主要讲解如何做一个有仪式感的程序员。利用 Python 每天给你心爱的人,发送邮件信息,来一次不一样的早安问候。
本篇文章的灵感来源于我有一天爬取某地方天气状况,想到自己学习过邮件发送的知识,于是便着手实现将某个地点每天的天气状况以邮件的形式进行发送。
实战分析
我们从中国天气获取城市代码、名称和天气状况。
1.城市信息
我国主要分为八大地区,其中每个地区下又包括各个省份信息,点击省份,跳转到新的页面,其中包括该省份各个县级以及乡级行政区。
代码方面主要分为两部分,先爬取到各个省份的 URL,接着再爬取每个省份下的城市代码信息。
def parse_url(url):'''查询每个地区的省会url,下一步进行跳转:param url::return: 省会urls'''provinces = []text = get_page(url)doc = pq(text)items = doc('.conMidtab2 > table > tr:nth-child(3) > td.rowsPan').items()name_set = set()for item in items:province_url = 'http://www.weather.com.cn' + item.find('a').attr('href')province_name = item.find('a').text()province = {'province_url': province_url,'province_name': province_name}if province_name not in name_set:name_set.add(province_name)provinces.append(province)else:breakreturn provincesdef get_city_id(curl):'''读取每个省下的城市信息:param curl::return: 城市代码和名称'''cities = []text = get_page(curl)pattern = re.compile('<td width="83" height="23".*?<a.*?href=".*?weather/(.*?).shtml".*?>(.*?)</a></td>', re.S)results = re.findall(pattern, text)n = 0name_set = set()for item in results:id = item[0]name = item[1]city = {'id': id,'name': name}if name not in name_set:name_set.add(name)cities.append(city)else:continuereturn cities
2.天气状况
在 http://www.weather.com.cn/weather/101010200.shtml 页面获取当天的天气状况,其中 101010200 即为上述我们得到的城市代码。
def get_weather(url):
'''获取天气预报的主要信息:param url::return:'''text = get_page(url)html = etree.HTML(text)result = html.xpath('//li[@class="sky skyid lv3 on"]')[0]wea = result.xpath('p[@class="wea"]/text()')[0].replace('\n', '').replace('\t', '')tem = result.xpath('p[@class="tem"]')[0].xpath('string(.)').replace('\n', '').replace('\t','') # string()提取多个子节点中的文本win = result.xpath('p[@class="win"]')[0].xpath('string(.)').replace('\n', '').replace('\t', '')
return (wea, tem, win)
3.邮件发送
邮件发送涉及到两个邮箱之间的传输,我这里使用网易邮箱作为发送方,作为发送方,需要获取授权码,QQ 邮箱作为接收方。
def send_email(mess):
# SMTP服务器以及相关配置信息smtp_server = 'smtp.163.com' #163邮箱用到的SMTP服务器from_addr = 'hkyy521@163.com'password = ' xxxx' #上面代码中发送方是163邮箱,所以密码不是邮箱的登录密码,而是手动开启SMTP协议后设置或分配的授权码!,但如果是Gmail则使用的密码是登录密码to_addr = '1739468244@qq.com'msg = MIMEText(mess, 'plain', 'utf-8')
# 如果没有加入如下代码,则会被识别为垃圾邮件
# 1.创建邮件(写好邮件内容、发送人、收件人和标题等)msg['From'] = format_addr('天气卫士 <%s>' % from_addr) # 发件人昵称和邮箱msg['To'] = format_addr('管理员 <%s>' % to_addr) # 收件人昵称和邮箱msg['Subject'] = Header('来自acorn的问候……', 'utf-8').encode() # 邮件标题# 2.登录账号server = smtplib.SMTP(smtp_server, 25)server.login(from_addr, password)
# 3.发送邮件server.sendmail(from_addr, [to_addr], msg.as_string())server.quit()
4.定时发送
设置程序为开机自动运行。
E:
cd E:\PycharmWspace\PythonSpider\cdsn_learn01
python weather_spider.py
每天当你打开电脑,就会发送消息给你可爱的人。运行结果如下。
总结
这次的小程序只是一种尝试,虽然我们程序员平时都和代码打交道,但是这并不影响我们做个有趣的人,结合自己掌握的技能,也可以做出属于我们程序员独有的浪漫。
Python 开机自动发送天气预报和每日一句邮件相关推荐
- python爬虫教程:如何用40行Python代码实现天气预报和每日鸡汤推送功能
这篇文章主要介绍了通过40行Python代码实现天气预报和每日鸡汤推送功能,代码简单易懂,非常不错具有一定的参考借鉴价值 ,需要的朋友可以参考下 情人节刚过去几天,但是这和我们程序员有什么关系呢,对我 ...
- python发微信提醒天气_python-定时给指定微信好友发送天气预报和每日一句
参考链接 wxpy: 用 Python 玩微信 Python定时自动给微信好友发送天气预报 源码 weather.py from wxpy import * import requests from ...
- python-定时给指定微信女朋友发送天气预报和每日一句自动聊天抢红包抢票
wxpy: 用 Python 玩微信 Python定时自动给微信好友发送天气预报 # -*- coding: utf-8 -*- from __future__ import unicode_lite ...
- 【Python黑科技】获取每日一句美句,并定时发送邮件到指定邮箱(保姆级图文+实现代码)
目录 实现效果 实现思路 1.获取每日一句美句 2.定时发送需要接入时间模块 3.邮件发送 实现代码 总结 欢迎关注 『Python黑科技』 系列,持续更新中 欢迎关注 『Python黑科技』 系列, ...
- python文本文件操作诗句给上一句输出下一句_[Python] 自动化办公 定制微信每日一句诗...
转载请注明:陈熹 chenx6542@foxmail.com (简书号:半为花间酒) 若公众号内转载请联系公众号:早起Python 这篇文章能学到的主要内容: 利用"喵提醒"推送消 ...
- C++调用python,并抓取每日一句名言
作者:非妃是公主 专栏:<笔记><C++> <python学习> 个性签:顺境不惰,逆境不馁,以心制境,万事可成.--曾国藩 文章目录 前言 C++执行python ...
- Python实现在远端服务器挂代码—发送定时天气预报至邮箱+每日一句(小白教程)
Python实现在远端服务器挂代码-发送定时天气预报至邮箱+每日一句(小白教程) 人生苦短,我用python.下面来讲解一个python每天定时发送天气预报和每日一句至指定邮箱的脚本挂在服务器运行的程 ...
- python怎么把程序挂在远端服务器_Python实现在远端服务器挂代码—发送定时天气预报至邮箱+每日一句(小白教程)...
Python实现在远端服务器挂代码-发送定时天气预报至邮箱+每日一句(小白教程) 人生苦短,我用python.下面来讲解一个python每天定时发送天气预报和每日一句至指定邮箱的脚本挂在服务器运行的程 ...
- Golang实现发送微信公众号模板消息(每日一句和天气预报)
Golang实现发送微信模板消息(每日一句和天气预报) 前言 本文是基于https://www.cnblogs.com/connect/p/python-wechat-iciba.html 这篇博客写 ...
最新文章
- 怎样用Jenkins触发还有一个Jenkins---Global build solution
- Javaweb基础——Servlet
- C++ 向上转型初步01
- HTML5---新标签与特性
- 【转】 UML各种线的含义
- JDK1.8之Stream
- gdb java,调用gdb来调试java程序
- 递归神经网络教程请签收!
- ubuntu安装wps后缺少字体无法打开
- 连续分配、链接分配和索引分配详解
- 2021东北四省赛J. Transform(空间几何)
- java api接口_Java程序API数据接口
- 惠安高考状元2021成绩查询,2021年惠州高考成绩排名查询,成绩什么时候可以查询...
- 【vue】vue + ECharts 实现中国地图
- SourceTree的用法
- python里面title_python中title=(.*?)是什么意思
- 项目引入editormd并且解决上传图片的问题
- Qt动画之仿Win8 Metro主界面
- 面对世界不安,与其担忧,不如行动
- 易源数据_易源数据-商品条码查询【最新版】_商业智能_数据API_数据应用-云市场-阿里云...