linux使用crontab定时执行脚本、smtplib自动登陆邮箱、poplib进行邮件读取解析、BeautifulSoup进行网页爬取、logging进行错误日志记录

1、linux使用crontab定时执行脚本:

a、crontab启动、停止、启动、重启crontab服务:

一、正常情况(linux版本有service命令的):

重启命令:service crond restart

启动命令:service crond start

停止命令:service crond stop 

二、没有service命令的情况:

停止指令:/etc/init.d/cron stop

启动指令:/etc/init.d/cron start

b、crontab定时任务的编写:

搭配cron服务的一些参数说明:

-u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数

-l //列出某个用户cron服务的详细内容

-e //编辑某个用户的cron服务

-r //删除某个用户的cron服务

例如:

root@iZzxf7ditZ:~# crontab -u root -e 

其就会进入到一个编辑文件里面,即可以在里面填写要进行自动执行的指令,其前面有五个参数是用来指定时间的,详细使用看下面的时间规则。其这里的指令最好用sh脚本来而不是使用详细的执行内容,这样方便后期的维护。例如这里位:

1 8 * * 1-6 bash /home/DayDay/start.sh

这里周日是0,这里的意思是周一至周六的每天8:01进行执行这个脚本。其中sh脚本了的内容位:

cd /home/DayDay
/root/anaconda3/bin/python /home/DayDay/beautifget2.py  

注意可以看到这里的python和py文件都是全路径,因为crontab不知道我们需要的一些环境变量,即他不像shell控制台一样会自动加载一些环境变量,像:/usr/bin文件下的一些软连接等,所以需要使用全变量,否则其不会执行,因为找不到python这个软链接。

c、crontab的定时任务的时间格式规则编写:

指令前面的五个参数分别是:分(0-59)  小时(0-23)  日(1-31)  月(1-12) 星期(0-6) //0代表是星期天。

使用这些参数的一些规制:"*"代表所有取值范围内的数值   "/"代表每的意思  "*/5"代表每间隔5   "-"代表从某个值到某个值,

","代表几个指定的离散值    

如在4点到6点 每分钟向test.text中打印Hello world

  • d、查看在执行的任务指令:
crontab -l

 

2、使用smtplib自动登陆邮箱:

使用smtplib主要注意的一点就是关于是进行ssl加密传输还是直接使用smtp进行传输。因为在服务器上例如阿里云上其是关闭了25端口的,而这个端口是使用smtp直接传输的,这个就会导致链接smtp不成功。而使用自己电脑搭建服务器则可以使用两种方法。

第一种云服务跟本地电脑都适用的为:

# 发生邮件
def sendallmail(title, msg):
    host_server = 'smtp.qq.com'
    sendqqmail = '自己的QQ邮箱'
    receiver = '接收者的QQ邮箱'
    pwd = '发送者的服务码' #填自己的服务码,不是qq密码

    # 登陆邮箱操作,要使用ssl进行加密发送,否则在服务器上25端口会被封了
    smtp = smtplib.SMTP_SSL(host_server, 465)
    # smtp.debuglevel(1)
    # smtp.set_debuglevel(1)
    # 开始链接到smtp服务
    smtp.ehlo()
    smtp.login(sendqqmail, pwd)

    summsg = ""
    for data in msg:
        #为每个信息之间添加换行
        summsg = summsg + str(data) + "\n"
    # 填写邮件内容,可以在MIMEText输入文本里添加换行符
    msg = MIMEText(summsg, 'plain', 'utf-8')
    msg['Subject'] = Header(title, 'utf-8')
    msg['From'] = sendqqmail
    msg['To'] = receiver

    # 发生信息
    smtp.sendmail(sendqqmail, receiver, msg.as_string())
    smtp.quit()

2.2 poplib进行邮件读取解析:

主要参考博客:认真对待Python3收邮件  其代码也已经提交到自己的代码仓库:https://gitee.com/yangdashi/receive-mails

3、BeautifulSoup进行网页爬取:

其中爬取主要使用到的函数就是:findAll()或者find_all()用于查找指定的所有的html元素,其返回值是一个list(重要);get_text()

其是把html元素里的所有文本进行获取,返回值是一个字符串。split()对返回的粘连字符串进行分割,由于split不能使用多个分割符,如果多个的话可以使用re模块或者多个split联合使用。

#传入网址,返回对应的网页信息
def geturl_utf8(url):
    html = requests.get(url, headers=header).content.decode('utf-8')
    soup = BeautifulSoup(html, 'lxml')
    return soup

# 爬取网页
def webAnalyze(soup):
    name = None
    curvalue = None
    yesterday = None
    yesterday_date = None
    try:
        tags = soup.select('dd')
        curvalue = (tags[0].find_all('span')[0].string)
        yesterday = (tags[3].find_all("span")[0].string)
        # 切记这两个findAll得出的是一个list,即有[]的下面的要获取文本一定要加
        # 索引,要么就会报错,其错误信息是没有提示的。
        titls = soup.find_all(class_='fundDetail-tit')
        #要加索引,否则会报错。
        name = titls[0].get_text()
        # 获得昨天的时间
        dl = soup.findAll(class_="dataItem02")
        p = dl[0].select("p")
        yesterday_date = p[0].get_text().split(' ')[1]
        print(yesterday_date)

        return name, curvalue, yesterday, yesterday_date
        # print(titls)
    except:
        return name, curvalue, yesterday

4、logging进行错误日志记录:

当程序代码进行运行的时候,最好能把一些错误日志记录起来,方便检测使用。例子

import logging
from logging import handlers

class Logger(object):
    level_relations = {
        'debug': logging.DEBUG,
        'info': logging.INFO,
        'warning': logging.WARNING,
        'error': logging.ERROR,
        'crit': logging.CRITICAL
    }  # 日志级别关系映射

    def __init__(self, filename, level='info', when='D', backCount=3,
                 fmt='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'):
        self.logger = logging.getLogger(filename)
        format_str = logging.Formatter(fmt)  # 设置日志格式
        self.logger.setLevel(self.level_relations.get(level))  # 设置日志级别
        sh = logging.StreamHandler()  # 往屏幕上输出
        sh.setFormatter(format_str)  # 设置屏幕上显示的格式
        th = handlers.TimedRotatingFileHandler(filename=filename, when=when, backupCount=backCount,
                                               encoding='utf-8')  # 往文件里写入#指定间隔时间自动生成文件的处理器
        # 实例化TimedRotatingFileHandler
        # interval是时间间隔,backupCount是备份文件的个数,如果超过这个个数,就会自动删除,when是间隔的时间单位,单位有以下几种:
        # S 秒
        # M 分
        # H 小时、
        # D 天、
        # W 每星期(interval==0时代表星期一)
        # midnight 每天凌晨
        th.setFormatter(format_str)  # 设置文件里写入的格式
        self.logger.addHandler(sh)  # 把对象加到logger里
        self.logger.addHandler(th)

#其中log.txt如果存在,则不新建,如果不存在,则新建。
log = Logger('log/log.txt', level='debug')
#往日志里写入错误信息,其中error表示这是一条错误信息。
log.logger.error('sendmail error!')

其中文件里的内容为:

2019-04-28 12:57:31,239 - H:/python/BeiHang/DayDayDay/beautifget2.py[line:104] - ERROR: sendmail error!

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值