• Python处理刚刚,分钟,小时,天前等时间


    简介

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

    解决问题:

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

    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分钟前"))
    
    

    __EOF__

  • 本文作者: 红 后
  • 本文链接: https://www.cnblogs.com/Red-Sun/p/16851559.html
  • 关于博主: 评论和私信会在第一时间回复。或者直接私信我。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    tcpdump简析
    Android开发第一课
    vscode远程调试php
    Java String、StringBuffer和StringBuilder的相关总结
    MKS SERVO28C 闭环步进电机 使用说明
    季铵盐离子液体4-(苯甲酸)三乙胺溴(QAIL)固载金属-有机骨架材料MIL-101(科研)
    MM32F0020 UART1中断接收和UART1中断发送
    硼替佐米大鼠血清白蛋白RSA纳米粒|布立尼布小麦麦清白蛋白纳米粒|马赛替尼豆清白蛋白纳米粒(齐岳)
    深入理解requests库和使用方法
    ElasticSearch 进阶(一)
  • 原文地址:https://www.cnblogs.com/Red-Sun/p/16851559.html