python网络爬虫爬取官网新通知,并发送邮箱

简介
考研结束后,因为要关注官网发布的录取通知,每天都要去官网看好几遍。于是便做一个网络爬虫来自动处理事件,可以判断当天是否有最新的消息发布,如果有就发送到个人邮箱。
该爬虫主要涉及的部分有:

  1. 网页请求
  2. 网页解析
  3. 时间判断
  4. 邮件发送

网页请求
网页请求使用的是常规的requests库

    def get_response(self, url):
        print(url)
        response = requests.get(url)
        data = response.content
        return data

页面解析
首先看一下所要爬取的页面的结构:
在这里插入图片描述
首次所要爬取的目标便是官网通知的标题信息,可以通过 id='content’下的a标签来进行定位,这一部分的解析如下:

    def parse_data(self,data):
        soup = BeautifulSoup(data, 'html.parser', from_encoding='gb18030')
        all = soup.find(id="content")
        new_url = self.url+all.a['href']
        print(all.a.text)
        self.notice = all.a.text
        #print(new_url)
        return new_url

时间判断
对于每一个通知,在其具体的HTML页面下会有相应的时间信息
在这里插入图片描述
判断该日期和当前电脑日期是否相同,即可判断是否是最新发布的消息,该时间是通过class_="info-article"来进行定位的,同时做了一定的字符串调整过程。系统当前时间则是调用了time库来进行获得。这里没有新公告,我也做了发送操作,如果不需要直接将没新公告下的发送逻辑删除即可。

    def get_content(self,new_url):
        data = requests.get(new_url).content
        soup = BeautifulSoup(data, 'html.parser', from_encoding='gb18030')
        tim = soup.find('div',class_="info-article").text[6:16]

        #print(tim)

        current_time = time.strftime('%Y-%m-%d', time.localtime(time.time()))
        #print(current_time)

        if tim.strip() == current_time.strip():
            print("今日有新公告")
            self.notice = self.notice+"今日有新公告"
            self.send_email(self.notice)
        else:
            print("今日没有新公告")
            self.notice = "今日没有新公告"
            self.send_email(self.notice)

邮件发送
邮件发送则用到了smtplib以及email模块,这里直接pip install PyEmail 就好,这里需要强调的是password不是登录密码,而是邮箱的授权码,具体的获取过程可以参考授权码获取

    def send_email(self,email_body):
        from_addr = 'xxx@qq.com'
        password = 'xxx'#这里不是登录密码,而是邮箱授权码

        # 收信方邮箱
        to_addr = 'xxx@qq.com'

        # 发信服务器
        smtp_server = 'smtp.qq.com'

        # 邮箱正文内容,第一个参数为内容,第二个参数为格式(plain 为纯文本),第三个参数为编码
        msg = MIMEText(email_body, 'plain', 'utf-8')

        # 邮件头信息
        msg['From'] = Header(from_addr)
        msg['To'] = Header(to_addr)
        msg['Subject'] = Header('newest notice')

        # 开启发信服务,这里使用的是加密传输
        server = smtplib.SMTP_SSL(smtp_server)
        server.connect(smtp_server, 465)
        # 登录发信邮箱
        server.login(from_addr, password)
        # 发送邮件
        server.sendmail(from_addr, to_addr, msg.as_string())
        # 关闭服务器
        server.quit()

做的比较草率,有什么不足的地方还请见谅,完整的代码连接放在github上了,代码连接

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值