简介

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

解决问题:

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

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

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

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

  1. def deal_time(zh_time):
  2. '''
  3. 对时间进行分类处理,对不同情况进行判断
  4. '''
  5. zh_time = exchange_num(zh_time.strip())
  6. time_list = [
  7. "小时前",
  8. "分钟前",
  9. "刚刚",
  10. "天前"
  11. ]
  12. now_time = datetime.strftime(datetime.today(), '%Y-%m-%d')
  13. time_key_dict = {}
  14. [time_key_dict.update({key: operator.contains(zh_time, key)}) for key in time_list]
  15. if time_key_dict['刚刚'] or time_key_dict['分钟前']:
  16. return now_time
  17. elif time_key_dict['小时前']:
  18. now_hour = datetime.strftime(datetime.today(), "%H")
  19. pattern = re.search(r"(\d+)", zh_time)
  20. if pattern.group(1) <= now_hour:
  21. # 小于24小时转换成当日时间
  22. return now_time
  23. else:
  24. return datetime.strftime(datetime.today() + timedelta(days=-1), '%Y-%m-%d') # 获取前1天日期
  25. elif time_key_dict['天前']:
  26. try:
  27. pattern = re.search(r"(\d+)", zh_time)
  28. zh_time = datetime.strftime(datetime.today() + timedelta(days=(int(pattern.group(1))) * -1),'%Y-%m-%d')
  29. return zh_time
  30. except Exception:
  31. return f"转换失败 当前时间{now_time},网站中的时间{zh_time}"
  32. else:
  33. return zh_time

完整代码如下

  1. import operator
  2. from datetime import datetime, timedelta
  3. import re
  4. class DealTime:
  5. '''
  6. 处理刚刚,分钟,小时,天前等时间
  7. '''
  8. def exchange_num(self, date):
  9. '''
  10. 将输入字符串中的中文数字转换成阿拉伯数字
  11. '''
  12. zh_num = '零一二三四五六七八九'
  13. for num in range(len(zh_num)):
  14. date = date.replace(zh_num[num], str(num))
  15. return date
  16. def deal_time(self, zh_time):
  17. '''
  18. 对时间进行分类处理,对不同情况进行判断
  19. '''
  20. zh_time = self.exchange_num(zh_time.strip())
  21. time_list = [
  22. "小时前",
  23. "分钟前",
  24. "刚刚",
  25. "天前"
  26. ]
  27. now_time = datetime.strftime(datetime.today(), '%Y-%m-%d')
  28. time_key_dict = {}
  29. [time_key_dict.update({key: operator.contains(zh_time, key)}) for key in time_list]
  30. if time_key_dict['刚刚'] or time_key_dict['分钟前']:
  31. return now_time
  32. elif time_key_dict['小时前']:
  33. now_hour = datetime.strftime(datetime.today(), "%H")
  34. pattern = re.search(r"(\d+)", zh_time)
  35. if pattern.group(1) <= now_hour:
  36. # 小于24小时转换成当日时间
  37. return now_time
  38. else:
  39. return datetime.strftime(datetime.today() + timedelta(days=-1), '%Y-%m-%d') # 获取前1天日期
  40. elif time_key_dict['天前']:
  41. try:
  42. pattern = re.search(r"(\d+)", zh_time)
  43. zh_time = datetime.strftime(datetime.today() + timedelta(days=(int(pattern.group(1))) * -1), '%Y-%m-%d')
  44. return zh_time
  45. except Exception:
  46. return f"转换失败 当前时间{now_time},网站中的时间{zh_time}"
  47. else:
  48. return zh_time
  49. if __name__ == '__main__':
  50. print(DealTime().deal_time("刚刚"))
  51. print(DealTime().deal_time("一天前"))
  52. print(DealTime().deal_time("1天前"))
  53. print(DealTime().deal_time("5分钟前"))

Python处理刚刚,分钟,小时,天前等时间的更多相关文章

  1. Golang 和Python 几个小时前 几分钟 几天前的处理

    在用golang爬虫的时候 总会遇到 10天前 10分钟前 刚刚这种很影响我们爬取正常事件 所以我写了个方法 来格式化这种事件 golang 版本 package utils import ( &qu ...

  2. iOS-OC根据时间戳获取距离现在的状态(刚刚,分钟前,今天,昨天)

     iOS-OC根据时间戳获取距离现在的状态(刚刚,分钟前,今天,昨天) 获取时间戳 - (NSString *)distanceTimeWithBeforeTime:(double)beTime { ...

  3. Oracle中获取当前时间半小时前的时间

    最近项目中有个要根据半个小时前的数据情况判断某一栏位的值,但是一直没想到怎样获取当前时间的半小时前的时间,今天突然想到可以通过sysdate做差来获取,比如sysdate-1这样的,刚开始没有对结果进 ...

  4. 一个Python小白5个小时爬虫经历

    前言 最近业余在做一个基于.NET Core的搜索项目,奈何基层代码写好了,没有看起来很华丽的数据供测试.很巧的也是博客搜索,于是乎想到了博客园.C#也能做做页面数据抓取的,不过在博客园看到的大部分都 ...

  5. JavaScript Date学习实例:获取3分钟前的时间“hhmmss”格式

    上一篇博客分享了Date对象的理论知识,今天正好看到一段相关的代码,可以继续深化,通过实例加强复习Date 题目:获取3分钟前的时间,并且显示格式是hhmmss 以下是看到的代码 var time=n ...

  6. [Java]某日期时间加上若干分钟得到新的日期时间

    使用Java自带类库实现日期时间增减还是比自己人工拆分编写要牢靠,代码也简洁多了. 下面代码实现了在原有日期时间上加上一些分钟得到新的日期时间的功能,稍加改造还可以实现逆向运算. 代码: packag ...

  7. js 获取据当前时间n天前的时间

    <script type="text/javascript"> function getLastDate() { var date = new Date(); ; va ...

  8. JS如何设置计算几天前的时间?

    计算多少天前的具体时间.比如今天是9月5日,那7天前正常就是8月29了. 之前曾经直接用时间进行加减,吃了大亏,后来脑残到直接写了一个很复杂的计算闰年,闰月,30.31.28的月份 现在分享一下. f ...

  9. Java 求n天前的时间或者n月前的时间

    时间格式化 public static String DEFAULT_FORMATDATE = "yyyy-MM-dd"; 1.n天前的日期 /** * luyanlong * 默 ...

随机推荐

  1. gorm tips

    约定的列名 type User struct { ID uint // 列名是 `id` Name string // 列名是 `name` Birthday time.Time // 列名是 `bi ...

  2. linux项目环境部署入门

    linux目录 /bin 二进制可执行命令 (ls,cat,mkdir等) /dev 设备特殊文件/etc 系统管理和配置文件/etc/rc.d 启动的配置文件和脚本 /opt 额外安装的可选应用程序 ...

  3. 检查原生 JavaScript 函数是否被覆盖

    你如何确定一个JavaScript原生函数是否被覆盖? 你不能--或者至少无法可靠地确定.有一些检测方法很接近,但你不能完全相信它们. JavaScript原生函数 在JavaScript中,原生函数 ...

  4. Windows API 学习

    Windows API学习 以下都是我个人一些理解,笔者不太了解windows开发,如有错误请告知,非常感谢,一切以microsoft官方文档为准. https://docs.microsoft.co ...

  5. vs完整编译Opencv+contrib

    准备条件 Opencv源码(以4.3.0为例) OpenContrib源码(以4.3.0)为例 最新版的CMake GUI CMake 生成项目 设置source code 和生成的build文件夹 ...

  6. Util和Helper类

    Util和Helper Util Util类,应该是一个无状态的类,只有静态方法. 比如在获取某些类的全局实例化对象的时候可以使用. public class ParamUtil { ... publ ...

  7. 如何在 C# 程序中注入恶意 DLL?

    一:背景 前段时间在训练营上课的时候就有朋友提到一个问题,为什么 Windbg 附加到 C# 程序后,程序就处于中断状态了?它到底是如何实现的? 其实简而言之就是线程的远程注入,这一篇就展开说一下. ...

  8. Kubernetes 上部署应用-- 以Wordpress 为例

    用一个 Wordpress 示例来尽可能将前面的知识点串联起来,我们需要达到的目的是让 Wordpress 应用具有高可用.滚动更新的过程中不能中断服务.数据要持久化不能丢失.当应用负载太高的时候能够 ...

  9. Loki日志系统基础知识

    文章摘抄转载自:https://lluozh.blog.csdn.net/article/details/111027998 Loki 日志系统由以下3个部分组成: loki是主服务器,负责存储日志和 ...

  10. Gitlab添加K8S集群

    介绍如何在Gitlab项目中添加K8S集群,以便使用K8S集群部署gitlab-runner帮我们运行gitlab的CI/CD. 参考官方文档:https://docs.gitlab.com/ee/u ...