python定时发送邮件、爬虫监控、爬虫定时启动

1.邮件发送模板


from email.mime.text import MIMEText
from smtplib import SMTP


    def send_email(self,text):
        '''
        发送邮件
        :param text:
        :return:
        '''
        # 定义发件人
        msg_from = 'xxxxxxxx@qq.com'
        # 授权码
        password = 'ndivp***xewagahi'
        # 发件人
        msg_to = 'xxxxxxxxx@qq.com'  #收件人多个人用;分隔
        # 主题
        subject = text[0]
        # 创建邮件对象
        msg = MIMEText(text[1], 'plain', 'utf-8')
        msg['From'] = msg_from
        msg['To'] = msg_to
        msg['Subject'] = subject
        try:
            # 创建smtp对象(邮件传输协议)
            smtp = SMTP()
            # 连接QQ服务器
            smtp.connect('smtp.qq.com',25)
            # 登录
            smtp.login(msg_from, password)
            # 发送
            smtp.sendmail(msg_from,msg['To'].split(';'),msg.as_string())
            print('发送成功!')
            smtp.close()
        except Exception as e:
            print('邮件发送失败!',e)

2.定时发送邮件

爬虫说明:爬取的一个睡前小故事的网站
实现功能:定时触发爬虫程序,定向定时向用户发送一篇随机的故事以邮件的方式

# -*- coding:utf-8 -*-
import requests
import random
from lxml import etree
import urllib
import os
from email.mime.text import MIMEText
from smtplib import SMTP
import schedule
import time

class SleepStory(object):
    def __init__(self, url):
        self.url = self.init_url(url)

    def init_url(self, url):
        '''
        确定爬取的页数(生成随机数)
        :rtype: object
        :param url:
        :return:
        '''
        page = random.randint(0,71)
        if page == 0:
            return url.format('')
        else:
            return url.format('_'+str(page))

    def get_xpath(self, url):
        headers = {
            'USER_AGENT' :'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'
        }
        response = requests.get(url=url, headers=headers)
        # etree.HTML(response.text) 构造了一个XPath解析对象
        return etree.HTML(response.content.decode('utf-8'))

    def parse_story(self, url):
        '''
        获取故事类容,发送邮寄
        :param url:
        '''
        html = self.get_xpath(url)
        story_name = html.xpath('//h1/text()')[0]
        story_content = html.xpath('string(//div[@class="t_news_txt"])')
        # os.linesep 系统换行
        self.send_email((story_name, story_content))

    def send_email(self,text):
        '''
        发送邮件
        :param text:
        :return:
        '''
        # 定义发件人
        msg_from = 'xxxxxxxxx@qq.com'
        # 授权码
        password = 'ndivpszxxewagahi'
        # 发件人
        msg_to = 'xxxxxxxx@qq.com'  #收件人多个人用;分隔
        # 主题
        subject = text[0]
        # 创建邮件对象
        msg = MIMEText(text[1], 'plain', 'utf-8')
        msg['From'] = msg_from
        msg['To'] = msg_to
        msg['Subject'] = subject
        try:
            # 创建smtp对象(邮件传输协议)
            smtp = SMTP()
            # 连接QQ服务器
            smtp.connect('smtp.qq.com',25)
            # 登录
            smtp.login(msg_from, password)
            # 发送
            smtp.sendmail(msg_from,msg['To'].split(';'),msg.as_string())
            print('发送成功!')
            smtp.close()
        except Exception as e:
            print('邮件发送失败->',e)

    def parse(self):
        # 先获取该页面的所有dd_list
        html= self.get_xpath(self.url)
        dd_list = html.xpath('//dl[@class="txt_box"]/dd')
        # 在从中重新取出s一个
        dd_choice = random.choice(dd_list)
        # 获取详情页连接
        story_url = dd_choice.xpath('./a/@href')[0]
        story_url = urllib.parse.urljoin(self.url,story_url)
        self.parse_story(story_url)

def main():
    base_url = 'http://www.tom61.com/ertongwenxue/shuiqiangushi/index{}.html'
    app = SleepStory(base_url)
    schedule.every().day.at("21:00:00").do(app.parse) # 每天21:00:00触发
    schedule.every().day.at("14:00:00").do(app.parse)
    schedule.every(5).seconds.do(app.parse) # 每5秒触发,用于调试的

    while True:
        schedule.run_pending()
        time.sleep(1)

if __name__ == '__main__':
    main()

3.爬虫监控

  • 爬虫监控给的由来:
    爬虫监控相当于监控(自动)一个爬虫,由于爬虫可能会出现一些问题,页面结构的变化,加载方式的改变等,就会造成大量的数据为空。对于这种情况,如果有一个类似于监控的展示代码出错的原因

  • 监控的实现:
    可以通过发邮件的形式

  • 监控思路:
    可将发送邮件的模块嵌入到爬虫程序中,如果判断被反爬(爬虫多次后,重定向到验证码页面),或其他故障(如网页更新,网页结构发生变化,然后得到的值全为空值,博主经常写爬虫会遇到),则可以通过向自己发送邮件的方式提醒自己,实例源码需要可以私聊,这里暂且不做展示!

文章最后,如果觉得对你有一点点帮助,交出你的赞吧(滑稽),给博主一点鼓励!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值