简介

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

解决问题:

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

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

最新文章

  1. c3p0数据库连接池的使用详解
  2. mysql锁
  3. 【转】浅谈 C++ 中的 new/delete 和 new[]/delete[]
  4. 安装完MySQL数据库,在服务列表里找不到MySQL的解决办法
  5. 夺命雷公狗-----React---3--标签的规则
  6. 使用Maven编译项目遇到——“maven编码gbk的不可映射字符”解决办法 ——转载
  7. 知识准备-JOIN/EXISTS
  8. Maven中心仓库
  9. WebSocket原理及与http1.0/1.1 long poll和 ajax轮询的区别【转自知乎】
  10. WAD Forwarder版USB Loader的安装和运行
  11. hdu 2665 Kth number_划分树
  12. javascript 闭包理解例子
  13. POPTEST 150801 祝大家前途似锦
  14. Gluon炼丹(Kaggle 120种狗分类,迁移学习加双模型融合)
  15. 两种设计模式和XML解析
  16. SpringCloud的DataRest(一)
  17. Beta(2/7)
  18. Python __all__变量用法
  19. Jena搭建SPARQL查询RDF数据
  20. js-权威指南学习笔记3

热门文章

  1. Python小游戏——外星人入侵(保姆级教程)第一章 01创建Pygame窗口 02创建设置类Setting()
  2. CF1442D Sum (动态规划,线段树分治)
  3. 「SHOI2014」概率充电器
  4. C++ Protobuf
  5. Spring MVC组件之HandlerAdapter
  6. Java常用类的使用
  7. WebDriver常见操作
  8. js中new的原理
  9. 五、frp内网穿透客户端frpc.ini各配置参数详解
  10. Kibana:如何周期性地为 Dashboard 生成 PDF Report