コード例 #1
0
def get_date(value):
    try:
        date = value.split(';')[-1].strip().split(' +0800')[0]
        tuple_time = time.strptime(date, '%a, %d %b %Y %H:%M:%S')
        value = time.mktime(tuple_time)
    except Exception:
        traceback.print_exc()
        error_msg = "run error\t\n error_msg: \n%s" % traceback.format_exc()
        log_mail(error_msg)
        print('Send an email with an error message')

    return value
コード例 #2
0
def push_data(data_list):
    # print(data_list)
    dict_date = {
        data_list[x].get('received_time'): data_list[x]
        for x in range(len(data_list))
    }
    # print(dict_date)
    list_date = [x for x in dict_date.keys()]
    # print(list_date)
    list_date.sort()
    # print(list_date)
    data_list = [dict_date.get(x) for x in list_date]
    step = 10
    data_sort = [data_list[i:i + step] for i in range(0, len(data_list), step)]
    for data_s in data_sort:
        num = len(data_s)
        data = json.dumps({'data': data_s})
        # 测试库
        # url = settings.PUSH_TEST_URL
        # 正式库
        url = settings.PUSH_URL
        for i in range(5):
            error_data = None
            try:
                res = requests.post(url, data, timeout=settings.PUSH_TIMEOUT)
                if json.loads(res.text).get('status') != 0:
                    error_data = 'return status error:%s' % res.text
                    print(error_data)
                else:
                    if json.loads(res.text).get('err_num') > 0:
                        error_msg = "Upload data error\t\n error_msg: \n%s\t\n error_data: \n%s" % (
                            res.text, data)
                        log_mail(error_msg)
                        print('Send an email with an error message')
                    else:
                        # print(data)
                        print("pushData: %s" % num)
                    time.sleep(1)
                    break
            except Exception:
                # traceback.print_exc()
                error_data = traceback.format_exc()
                print('push data error')
            finally:
                if i == 4:
                    error_msg = "Retry 5 upload errors\t\n error_msg: \n%s\t\n error_data: \n%s" % (
                        error_data, data)
                    log_mail(error_msg)
                    print(
                        'Too many failures, give up uploading, send error mail'
                    )
            time.sleep(5)
コード例 #3
0
ファイル: main.py プロジェクト: Biking0/spider_project
def forward_parse(msg_dict):
    # print(msg_dict.get('From'))
    """

    :param msg_dict: 传入分析的数据字典
    """
    for key in carrier_parse:
        if msg_dict.get('From').find(key) < 0:
            continue
        try:
            # print(key)
            data = carrier_parse.get(key).data_parse(msg_dict)
        except Exception:
            # 出现异常,保存异常信息并发送邮件
            msg_dict.pop('text')
            error_msg = "carrier: \n%s\t\n\n" \
                        "error_msg: \n%s\t\n\n" \
                        "error_data: \n%s" % (key, traceback.format_exc(), msg_dict)
            log_mail(error_msg)
            print('Send an email with an error message')

            return

        if data:
            # 数据出现错误时发送日志邮件
            if data.get('error_data'):
                msg_dict.pop('text')
                error_msg = "carrier: \n%s\t\n\n" \
                            "error_msg: \n%s\t\n\n" \
                            "error_data: \n%s" % (key, data.get('error_data'), msg_dict)
                log_mail(error_msg)
                print('Send an email with an error message')
                return

            # 增加邮件时间
            data['received_time'] = msg_dict.get('Received')
            data_list.append(data)
コード例 #4
0
ファイル: begin.py プロジェクト: Biking0/spider_project
# coding: utf-8
import traceback
import time

from main.main import main
from mail.log_mail import log_mail

if __name__ == '__main__':
    while True:
        try:
            main()
        except:
            traceback.print_exc()
            error_msg = "run error\t\n error_msg: \n%s" % traceback.format_exc(
            )
            log_mail(error_msg)
            print('Send an email with an error message')

        time.sleep(20 * 60)
コード例 #5
0
ファイル: main.py プロジェクト: Biking0/spider_project
def mail_handle():
    global num_163, num_qq
    # 遍历邮箱服务商
    for mailbox_server in mail_config:
        print('crawling %s mailbox' % mailbox_server)
        # 获取账号,密码,端口, 网络连接类型
        email, password, pop3_server, transport_protocols = (
            x for x in mail_config.get(mailbox_server))
        # 登录邮件服务器,防止出错,再次请求
        server = None
        for num_error in range(10):
            try:
                server = login_mail(email, password, pop3_server,
                                    transport_protocols)
                break
            except Exception as e:
                # if num_error == 9:
                #     raise e
                pass
        # 显示邮件数量和占用空间
        print('Messages:%s.\nSize:%s' % server.stat())

        # # 显示邮件编号
        # resp, mails, octets = server.list()

        # 获取最新的邮件,索引是从最早的邮件开始
        max_num = server.stat()[0]
        # 获取任务数量,同时替换最大任务数据
        if mailbox_server == '163':
            task_num = max_num - num_163 + 50
            num_163 = max_num
        else:
            task_num = max_num - num_qq + 50
            num_qq = max_num
        # max_num = 59319
        # task_num = 1000
        for i in range(task_num):
            index = max_num - i
            # index=60458
            msg, error_data = None, ''
            for x in range(5):  # 为防止程序卡死,最多可重试5次
                try:
                    msg = get_msg(server, index)
                    break
                except:
                    print('获取邮件出错,等待1秒重新请求。')
                    error_data = traceback.format_exc()
                    server = login_mail(email, password, pop3_server,
                                        transport_protocols)
                if x == 4:
                    error_msg = "邮箱:%s\t\n\r出错邮件:%s\t\n\r错误信息:%s" % (
                        email, index, error_data)
                    log_mail(error_msg)
                    print('get mail error,send error msg')
                time.sleep(1)
            if not msg:
                # 发现QQ邮箱的退信会出现这种问题
                print("邮件内容出错,邮件编号:%s" % index)
                continue

            # 展示邮件信息
            msg_dict = print_info(msg)
            yield msg_dict
        server.quit()