zoukankan      html  css  js  c++  java
  • Python爬虫获取天气预报并发到指定人的QQ邮箱

    关于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℃持续无风向 |
    +-------------+------------+------------------+
    复制代码
  • 相关阅读:
    在日志中记录Java异常信息的正确姿势
    基于Spring Boot架构的前后端完全分离项目API路径问题
    Spring生态简介
    WebSocket协议入门介绍
    Spring Boot程序正确停止的姿势
    python 中 __init__方法
    python中的if __name__ == 'main'
    python 类和实例
    内建模块 datetime使用
    内建模块collections的使用
  • 原文地址:https://www.cnblogs.com/-wenli/p/12584774.html
Copyright © 2011-2022 走看看