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分钟前"))
Python处理刚刚,分钟,小时,天前等时间的更多相关文章
- Golang 和Python 几个小时前 几分钟 几天前的处理
在用golang爬虫的时候 总会遇到 10天前 10分钟前 刚刚这种很影响我们爬取正常事件 所以我写了个方法 来格式化这种事件 golang 版本 package utils import ( &qu ...
- iOS-OC根据时间戳获取距离现在的状态(刚刚,分钟前,今天,昨天)
iOS-OC根据时间戳获取距离现在的状态(刚刚,分钟前,今天,昨天) 获取时间戳 - (NSString *)distanceTimeWithBeforeTime:(double)beTime { ...
- Oracle中获取当前时间半小时前的时间
最近项目中有个要根据半个小时前的数据情况判断某一栏位的值,但是一直没想到怎样获取当前时间的半小时前的时间,今天突然想到可以通过sysdate做差来获取,比如sysdate-1这样的,刚开始没有对结果进 ...
- 一个Python小白5个小时爬虫经历
前言 最近业余在做一个基于.NET Core的搜索项目,奈何基层代码写好了,没有看起来很华丽的数据供测试.很巧的也是博客搜索,于是乎想到了博客园.C#也能做做页面数据抓取的,不过在博客园看到的大部分都 ...
- JavaScript Date学习实例:获取3分钟前的时间“hhmmss”格式
上一篇博客分享了Date对象的理论知识,今天正好看到一段相关的代码,可以继续深化,通过实例加强复习Date 题目:获取3分钟前的时间,并且显示格式是hhmmss 以下是看到的代码 var time=n ...
- [Java]某日期时间加上若干分钟得到新的日期时间
使用Java自带类库实现日期时间增减还是比自己人工拆分编写要牢靠,代码也简洁多了. 下面代码实现了在原有日期时间上加上一些分钟得到新的日期时间的功能,稍加改造还可以实现逆向运算. 代码: packag ...
- js 获取据当前时间n天前的时间
<script type="text/javascript"> function getLastDate() { var date = new Date(); ; va ...
- JS如何设置计算几天前的时间?
计算多少天前的具体时间.比如今天是9月5日,那7天前正常就是8月29了. 之前曾经直接用时间进行加减,吃了大亏,后来脑残到直接写了一个很复杂的计算闰年,闰月,30.31.28的月份 现在分享一下. f ...
- Java 求n天前的时间或者n月前的时间
时间格式化 public static String DEFAULT_FORMATDATE = "yyyy-MM-dd"; 1.n天前的日期 /** * luyanlong * 默 ...
随机推荐
- postgresql使用group by进行数据去重-2022新项目
一.业务场景 数据去重是web开发中经常会遇到的方式之一,数据库操作中有一个关键字distinct主要就是用来做这件事,用来进行去重. 比如进行统计查询的时候,可以这样写 select count(d ...
- Shell第三章《for循环》
Shell循环:for 语法结构: for 变量名 [ in 取值列表 ] do 循环体 done 需求:自动创建10个用户 #!/bin/bash read -p "请输入你要创建的用户名 ...
- 超详细 VS Code 配置C/C++教程
写在前面 如果您使用的电脑内存 \(\leq 4 \texttt{GB}\),建议您使用Dev-C++,否则会到时内存占用爆满,体验感不佳. 网上的很多教程都不够详细,这里我把每一步.每一个操作都详细 ...
- Linux_etc-passwd文件总结
文件内容 ## # User Database # # Note that this file is consulted directly only when the system is runnin ...
- 分布式链路追踪体验-skywalking入门使用
背景 旁友,你的线上服务是不是偶尔来个超时,或者突然抖动一下,造成用户一堆反馈投诉.然后你费了九牛二虎之力,查了一圈圈代码和日志才总算定位到问题原因了.或者公司内部有链路追踪系统,虽然可以很轻松地通过 ...
- .Net7 内容汇总(1)
.Net7 RC1发布 在9月14号,.Net7 RC1正式发布了. 按照微软的说法 This is the first of two release candidates (RC) for .NET ...
- 使用mysql5.7版本的mysqldump备份mysql8.0版本的数据库报错解决办法
使用mysql5.7版本的mysqldump命令执行备份mysql8.0版本的数据库时会报错: mysqldump: Couldn't execute 'SET SQL_QUOTE_SHOW_CREA ...
- Redis可视化工具(支持ssh链接)
1.Redis Desktop Manager RedisDesktopManager,简称RDM,这是一款很出名的Redis可视化管理工具,支持Windows,Mac,Ipad,LInux 开源地址 ...
- k8s上安装elasticsearch集群
官方文档地址:https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-quickstart.html yaml文件地址:https://dow ...
- 使用 fail2ban 和 FirewallD 黑名单保护你的系统
如果你运行的服务器有面向公众的 SSH 访问,你可能遇到过恶意登录尝试.本文介绍了如何使用两个实用程序来防止入侵者进入我们的系统. 为了防止反复的 ssh 登录尝试,我们来看看 fail2ban.而且 ...