用Python爬虫做一个天气预报通知

用Python爬虫做一个天气预报通知

      这篇文章跟大家分享如何用python爬虫获取指定城市当天天气并通过邮件发送通知我们。

      我们先找一个当天指定城市的天气页面,跳转地址->天气信息,截图如下:

5.png

然后我们用python抓取我们想要的信息并通过QQ邮箱通知自己,代码如下:

# coding=utf-8
import smtplib
from email.mime.text import MIMEText
from urllib import request
from bs4 import BeautifulSoup

# 获取每天天气预报

############################# 获取当天天气 #############################
# 设置目标URL
target = 'https://tianqi.moji.com/weather/china/guangdong/shenzhen'
# 开始爬取
data = request.Request(target)
res = request.urlopen(data)
res = res.read()
# 转化数据
content = res.decode(encoding='utf-8')
soup = BeautifulSoup(content, 'html.parser')
# 【获取城市主体】
cityContent = soup.find('div', class_="search_default")
city = cityContent.find('em').getText().split(',')[0]
# 【获取天气主体】
weatherContent = soup.find('div', class_="wea_weather clearfix")
# 获取温度
temperature = weatherContent.find('em').getText()
# 获取天气状况
status = weatherContent.find('img').get('alt')
# 【获取天气基本数据主体】
aboutContent = soup.find('div', class_="wea_about clearfix")
# 获取湿度
humidity = aboutContent.find('span').getText()
# 获取风向
wind = aboutContent.find('em').getText()
# 【获取穿衣提示主体】
tips = soup.find('div', class_="wea_tips clearfix")
# 获取穿衣指数
tipsString = tips.find('em').getText()
# 【获取今日天气温差主体】
temperatureContent = soup.find('ul', class_="days clearfix")
temperatureDifference = temperatureContent.find_all('li')[2].getText()
# 处理最低最高温度
temperatureDifferenceDeal = temperatureDifference.replace("/", ",最高温度:")
# 组合最终天气预报数据
weatherString = ""
weatherString = weatherString + "当前城市:" + city + ",当前气温:" + temperature + "℃" + ",天气状况:" + status + "\n"
weatherString = weatherString + "最低温度:" + temperatureDifferenceDeal + "\n"
weatherString = weatherString + humidity + ",风向:" + wind + "\n"
weatherString = weatherString + "今日天气提醒:" + tipsString

########################## 发送邮件 ##########################
# 发送方邮箱
msg_from = '发送方邮箱'
# 填入发送方邮箱的授权码
passwd = '发送方邮箱的授权码'
# 收件人邮箱
msg_to = '收件人邮箱'
# 主题
subject = "每天天气预报"
# 正文
content = weatherString
# 发送邮件
msg = MIMEText(content)
msg['Subject'] = subject
msg['From'] = msg_from
msg['To'] = msg_to
try:
    # 邮件服务器及端口号
    s = smtplib.SMTP_SSL("smtp.qq.com", 465)
    s.login(msg_from, passwd)
    s.sendmail(msg_from, msg_to, msg.as_string())
    print("OK")
except:
    print("No")
finally:
    # 关闭
    s.quit()

以上代码我们用python获取指定城市天气信息,同时结合上一篇教程利用QQ邮箱做通知发给我们自己,声明下,该代码仅供个人参考使用,请不要作为其他用途。

0条评论

发表评论