Python 小技能之抓取天气信息发送给小姐姐
文 | 潮汐
来源:Python 技术「ID: pythonall」
每天一个 Python 小技巧,你学废了吗?今天文章主要讲解如何将天气预报信息爬取下来并发送给小姐姐,感兴趣的朋友不妨试试,说不定会有意外收获呢!
抓取数据
爬虫的基本思路简易了解就三步:下载数据(根据需要爬取的 url 设定用户代理)、解析数据(编写爬取规则并获得数据)、保存数据。
知道上述步骤后咱们的需求是首先找到中国天气网链接 https://tianqi.so.com/weather/ ,抓取中国天气网的数据,获取天气信息部分代码如下:
data_list = []
response = requests.get(url)
html_doc = response.text
soup = BeautifulSoup(html_doc, 'lxml') # 自动补全html代码,并按html代码格式返回
wendu = soup.find('div', class_='temperature').get_text()
tianqi = soup.find('div', class_='weather-icon-wrap').get_text()
data_list.append("现在的温度:%s\n现在天气情况:%s" % (wendu, tianqi))
list = soup.find_all('ul', class_='weather-columns')
for item in list:
data_list.append(item.get_text())
print("列表数据:",data_list)
a = 1
#创建PrettyTable对象,用于将天气数据用表格的方式输出
tb = pt.PrettyTable()
tb.field_names = ["日期","天气","详情"]
for item in data_list:
# print(a)
if a != 1:
tb.add_row([item.strip().split()[0]+item.strip().split()[1],item.strip().split()[2],item.strip().split()[3]])
else: print(item.strip())
a+=1
print(tb)
return tb
输出结果为:
现在的温度:23
现在天气情况:多云
+-------------+--------------+----------------+
| 日期 | 天气 | 详情 |
+-------------+--------------+----------------+
| 今天(07-28) | 雷阵雨 | 22/31℃优西南风 |
| 明天(07-29) | 多云 | 24/32℃良西南风 |
| 周四(07-30) | 阴 | 25/33℃良西南风 |
| 周五(07-31) | 雷阵雨 | 24/33℃良西南风 |
| 周六(08-01) | 多云 | 25/34℃良西南风 |
| 周日(08-02) | 中雨转雷阵雨 | 24/33℃优南风 |
| 周一(08-03) | 多云 | 25/32℃优东风 |
| 周二(08-04) | 小雨 | 22/32℃良东南风 |
| 周三(08-05) | 小雨转阴 | 22/32℃良南风 |
| 周四(08-06) | 小雨 | 22/32℃良东北风 |
| 周五(08-07) | 多云转小雨 | 21/33℃良南风 |
| 周六(08-08) | 小雨 | 21/34℃良西南风 |
| 周日(08-09) | 多云转小雨 | 21/34℃良南风 |
| 周一(08-10) | 小雨 | 21/34℃良南风 |
| 周二(08-11) | 多云转小雨 | 21/33℃良南风 |
+-------------+--------------+----------------+
发送邮件
将抓取的数据发送到相应的邮箱中,这里我将内容发送到自己的 QQ 邮箱,发送邮箱详细思路请详见 今天,我用 Python 给武汉人民发一封邮件,发送邮件代码如下:
实现代码:
# 收件人
receiver = receiver
mail_title = '小姐姐,请查收今天以及往后15天的天气预报,愿你三冬暖,春不寒'
mail_body = str(msg)
# 创建一个实例
message = MIMEText(mail_body, 'plain', 'utf-8') # 邮件正文
# (plain表示mail_body的内容直接显示,也可以用text,则mail_body的内容在正文中以文本的形式显示,需要下载)
# 邮件的发件人
message['From'] = sender
# 邮件的收件人
message['To'] = receiver
# 邮件主题
message['Subject'] = Header(mail_title, 'utf-8')
# 创建发送邮件连接
smtp = smtplib.SMTP_SSL("smtp.qq.com", 465)
# 连接发送邮件的服务器
smtp.connect(smtpserver)
# 登录到邮件服务器
smtp.login(username, password)
# 填入邮件的相关信息并发送
smtp.sendmail(sender, receiver, message.as_string())
smtp.quit()
调用发送邮件方法
if __name__ == '__main__':
sender = 'XXX@qq.com'
# 发件人邮箱的SMTP服务器(即sender的SMTP服务器)
smtpserver = 'smtp.qq.com'
# 发件人邮箱的用户名和授权码(不是登陆邮箱的密码)
username = 'XXX'
# 邮箱授权码
password = 'XXXXXXXXX'
url1 = 'https://tianqi.so.com/weather/'
receiver_list ='XXX@qq.com'
tb = get_Data(url1) #获得每一个用户的数据
send_mail(tb,receiver_list) #发送邮件
发送结果如下:
总结
今天的文章主要是使用 Python 爬虫和邮件发送功能两者结合使用的场景,如果学废的小伙伴请 扣 1,咱们明天见!
PS:公号内回复「Python」即可进入Python 新手学习交流群,一起 100 天计划!
老规矩,兄弟们还记得么,右下角的 “在看” 点一下,如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!
【代码获取方式】
识别文末二维码,回复:200730评论