简介

用爬虫获取目标网站数据后可能会遇见时间为处理刚刚,分钟,小时,天前等时间格式,如图

解决问题:

写了一个工具类来处理该问题,其中封装了两个函数

1. 将时间中的中文数字转换成阿拉伯数字

    def exchange_num(date):
        '''
        将输入字符串中的中文数字转换成阿拉伯数字
        '''
        zh_num = '零一二三四五六七八九'
        for num in range(len(zh_num)):
            date = date.replace(zh_num[num], str(num))
        return date

2.将时间按照刚刚,分钟,小时,天前等时间格式进行判定跟转换对应时间

    def deal_time(zh_time):
        '''
        对时间进行分类处理,对不同情况进行判断
        '''
        zh_time = exchange_num(zh_time.strip())
        time_list = [
            "小时前",
            "分钟前",
            "刚刚",
            "天前"
        ]
        now_time = datetime.strftime(datetime.today(), '%Y-%m-%d')
        time_key_dict = {}
        [time_key_dict.update({key: operator.contains(zh_time, key)}) for key in time_list]
        if time_key_dict['刚刚'] or time_key_dict['分钟前']:
            return now_time
        elif time_key_dict['小时前']:
            now_hour = datetime.strftime(datetime.today(), "%H")
            pattern = re.search(r"(\d+)", zh_time)
            if pattern.group(1) <= now_hour:
                # 小于24小时转换成当日时间
                return now_time
            else:
                return datetime.strftime(datetime.today() + timedelta(days=-1), '%Y-%m-%d')  # 获取前1天日期

        elif time_key_dict['天前']:
            try:
                pattern = re.search(r"(\d+)", zh_time)
                zh_time = datetime.strftime(datetime.today() + timedelta(days=(int(pattern.group(1))) * -1),'%Y-%m-%d')
                return zh_time
            except Exception:
                return f"转换失败 当前时间{now_time},网站中的时间{zh_time}"
        else:
            return zh_time

完整代码如下

import operator
from datetime import datetime, timedelta
import re


class DealTime:
    '''
    处理刚刚,分钟,小时,天前等时间
    '''

    def exchange_num(self, date):
        '''
        将输入字符串中的中文数字转换成阿拉伯数字
        '''
        zh_num = '零一二三四五六七八九'
        for num in range(len(zh_num)):
            date = date.replace(zh_num[num], str(num))
        return date

    def deal_time(self, zh_time):
        '''
        对时间进行分类处理,对不同情况进行判断
        '''
        zh_time = self.exchange_num(zh_time.strip())
        time_list = [
            "小时前",
            "分钟前",
            "刚刚",
            "天前"
        ]
        now_time = datetime.strftime(datetime.today(), '%Y-%m-%d')
        time_key_dict = {}
        [time_key_dict.update({key: operator.contains(zh_time, key)}) for key in time_list]
        if time_key_dict['刚刚'] or time_key_dict['分钟前']:
            return now_time
        elif time_key_dict['小时前']:
            now_hour = datetime.strftime(datetime.today(), "%H")
            pattern = re.search(r"(\d+)", zh_time)
            if pattern.group(1) <= now_hour:
                # 小于24小时转换成当日时间
                return now_time
            else:
                return datetime.strftime(datetime.today() + timedelta(days=-1), '%Y-%m-%d')  # 获取前1天日期

        elif time_key_dict['天前']:
            try:
                pattern = re.search(r"(\d+)", zh_time)
                zh_time = datetime.strftime(datetime.today() + timedelta(days=(int(pattern.group(1))) * -1), '%Y-%m-%d')
                return zh_time
            except Exception:
                return f"转换失败 当前时间{now_time},网站中的时间{zh_time}"
        else:
            return zh_time


if __name__ == '__main__':
    print(DealTime().deal_time("刚刚"))
    print(DealTime().deal_time("一天前"))
    print(DealTime().deal_time("1天前"))
    print(DealTime().deal_time("5分钟前"))

原文地址:http://www.cnblogs.com/Red-Sun/p/16851559.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性