python
用Python爬虫做一个天气预报通知
用Python爬虫做一个天气预报通知
这篇文章跟大家分享如何用python爬虫获取指定城市当天天气并通过邮件发送通知我们。
我们先找一个当天指定城市的天气页面,跳转地址->天气信息,截图如下:
然后我们用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条评论