关于email模块的使用
爬取天气预报并发到指定人的QQ邮箱(使用新浪邮箱)
天气预报: https://tianqi.so.com/weather/

# coding: utf-8
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import requests
from bs4 import BeautifulSoup
import prettytable as pt
def get_Data(url):
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
现在天气情况:%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
tb = pt.PrettyTable() #创建PrettyTable对象
tb.field_names = ["日期","天气","详情"]
for item in data_list:
# print(a)
if a != 1:
# print(item.strip())
# print(item.strip().split()[0]+item.strip().split()[1],item.strip().split()[2],item.strip().split()[3])
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
def send_mail(msg,receiver):
# 收件人
receiver = receiver
mail_title = '天气预报'
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() # 创建一个连接
smtp.connect(smtpserver) # 连接发送邮件的服务器
smtp.login(username, password) # 登录服务器
smtp.sendmail(sender, receiver, message.as_string()) # 填入邮件的相关信息并发送
smtp.quit()
if __name__ == '__main__':
sender = '发送者邮箱'
# 发件人邮箱的SMTP服务器(即sender的SMTP服务器)
smtpserver = 'smtp.sina.com'
# 发件人邮箱的用户名和授权码(不是登陆邮箱的密码)
username = '发送者登陆邮箱'
password = '密码' # (83xxxx202@qq.com邮箱的授权码或者密码)
url_list = ['url1','url2']
receiver_list =['接收者邮箱1','接收者邮箱2']
for i in range(len(url_list)):
tb = get_Data(url_list[i]) #获得每一个用户的数据
send_mail(tb,receiver_list[i]) #发送邮件

运行结果:

列表数据: ['现在的温度:19
现在天气情况:晴', '今天 (05-13) 多云
16/24℃轻度北风 3-5级', '明天 (05-14) 小雨转中雨
18/24℃良东南风 微风', '周三 (05-15) 小雨转多云
19/26℃优北风 微风', '周四 (05-16) 多云
20/30℃优东北风 微风', '周五 (05-17) 多云
20/29℃良东风 微风', '周六 (05-18) 小雨
19/31℃优东风 微风', '周日 (05-19) 小雨转多云
12/27℃优北风 5-6级']
现在的温度:19
现在天气情况:晴
+-------------+------------+----------------+
| 日期 | 天气 | 详情 |
+-------------+------------+----------------+
| 今天(05-13) | 多云 | 16/24℃轻度北风 |
| 明天(05-14) | 小雨转中雨 | 18/24℃良东南风 |
| 周三(05-15) | 小雨转多云 | 19/26℃优北风 |
| 周四(05-16) | 多云 | 20/30℃优东北风 |
| 周五(05-17) | 多云 | 20/29℃良东风 |
| 周六(05-18) | 小雨 | 19/31℃优东风 |
| 周日(05-19) | 小雨转多云 | 12/27℃优北风 |
+-------------+------------+----------------+
列表数据: ['现在的温度:21
现在天气情况:多云', '今天 (05-13) 晴转小雨
17/25℃持续无风向 微风', '明天 (05-14) 多云转小雨
17/25℃持续无风向 微风', '周三 (05-15) 小雨转晴
19/28℃持续无风向 微风', '周四 (05-16) 晴转小雨
20/28℃持续无风向 微风', '周五 (05-17) 多云转阴
21/28℃持续无风向 微风', '周六 (05-18) 阵雨
18/28℃持续无风向 微风', '周日 (05-19) 多云
17/27℃持续无风向 微风']
现在的温度:21
现在天气情况:多云
+-------------+------------+------------------+
| 日期 | 天气 | 详情 |
+-------------+------------+------------------+
| 今天(05-13) | 晴转小雨 | 17/25℃持续无风向 |
| 明天(05-14) | 多云转小雨 | 17/25℃持续无风向 |
| 周三(05-15) | 小雨转晴 | 19/28℃持续无风向 |
| 周四(05-16) | 晴转小雨 | 20/28℃持续无风向 |
| 周五(05-17) | 多云转阴 | 21/28℃持续无风向 |
| 周六(05-18) | 阵雨 | 18/28℃持续无风向 |
| 周日(05-19) | 多云 | 17/27℃持续无风向 |
+-------------+------------+------------------+
