本文主要是介绍python发邮件11002_python3获取搜狐天气情况并发邮件提醒,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
听说Python2可能会在2020年就不再提供技术维护了,所以当时直接学Python3是明智的。学习最好的方法就是贴近生活,所以在工作上,生活上能把学习到的知道应用上来那肯定是很容易记住,也会大大的增加学习的兴趣。
这里记录一下Python3下获取搜狐天气的情况,并通过外部smtp邮件发送提醒功能。
Pycharm:4.0.7
Python:3.5.2
直接上代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/1/21 0021 14:34
# @Author : Swper
# @Site : http://www.58jb.com/
# @File : getWeather.py
# @Software: PyCharm
#python 获取搜狐天气情况
import requests
from bs4 import BeautifulSoup
from email.mime.text import MIMEText
from email.header import Header
from email.utils import formataddr
import smtplib
def get_weather(city):
headers=("User-Agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36"
"(KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36")
url = 'http://m.sohu.com/weather/?city={0}'.format(city)
r = requests.get(url,headers={"User-Agent":headers})
html = r.text
soup = BeautifulSoup(html,'html.parser') #使用哪个解析器
city = soup.find('b').string
current = soup.find('p',{"class":"cur"}).string
lowest = soup.find('em',{"class":"lowest"}).string
highest = soup.find('em',{"class":"highest"}).string
stat = soup.find('em',{"class":"stat"}).string
pm = soup.find("div",class_="pm") #class_ 默认class是python里的一个内置函数
pm_25,air_stat = map(lambda x:x.string,pm)
lifeNumBg = soup.find('div',class_="lifeNumBg").text
return ("{0} {1}\n当前气温:{2}\n最低温:{3}\n最高温:{4}\n空气气量:{5}\npm 2.5:{6}\n\n生活指数:{7}".format(
city,stat,current,lowest,highest,air_stat,pm_25,lifeNumBg))
def send_mail(result):
sender='XXXXXX' # 发件人邮箱账号
my_pass = 'XXXXXX' # 发件人邮箱密码(当时申请smtp给的口令)
receivers='XXXXXX' # 收件人邮箱账号,我这边发送给自己
try:
msg=MIMEText(result,'plain','utf-8')
msg['From']=formataddr(['发件人别名',sender]) # 括号里的对应发件人邮箱昵称、发件人邮箱账号
msg['To']=formataddr(['收件人别名',receivers]) # 括号里的对应收件人邮箱昵称、收件人邮箱账号
msg['Subject']="邮件主题-测试" # 邮件的主题,也可以说是标题
# server=smtplib.SMTP_SSL("smtp.163.com", 25) # 发件人邮箱中的SMTP服务器,如果使用ssl加密端口是465
server=smtplib.SMTP("smtp.163.com", 25) # 发件人邮箱中的SMTP服务器,端口是25
server.login(sender, my_pass) # 括号中对应的是发件人邮箱账号、邮箱密码
server.sendmail(sender,[receivers],msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
server.quit()# 关闭连接
return True
except Exception as e: # 如果 try 中的语句没有执行,就捕获异常,并返回False
print (str(e))
return False
if __name__ == '__main__':
result = get_weather("东莞")
send_mail(result)
效果图:
这里的发邮件代码里可以不使用:formataddr 效果就是少了收、发件人的别名:
# msg['From']=Header(sender) # 括号里的对应发件人邮箱
# msg['To']=Header(receivers) # 括号里的对应收件人邮箱
这篇关于python发邮件11002_python3获取搜狐天气情况并发邮件提醒的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!