在用golang爬虫的时候

总会遇到 10天前 10分钟前 刚刚这种很影响我们爬取正常事件

所以我写了个方法 来格式化这种事件

golang 版本

package utils

import (
"fmt"
"regexp"
"strconv"
"strings"
"time"
) func HoursBeforeDayBeforeFormat(arcTime string) string {
arcTime = strings.TrimSpace(arcTime) timeList := [...]string{
"小时前",
"分钟前",
"刚刚",
} t := time.Now() // 获取当前时间
currentTime := t.Format("2006-01-02 15:04:05") //获取当前格式的日期
for _, _value := range timeList {
isContains := strings.Contains(arcTime, _value)
if isContains {
nowHour := time.Now().Format("15")
pattern := regexp.MustCompile(`\d+`)
afterNumber := pattern.FindString(arcTime)
if afterNumber == "" {
if arcTime == "刚刚" {
return currentTime
} else {
return "请传入带有数字类型 比如:5小时前"
}
} if afterNumber <= nowHour {
return currentTime
} else if strings.Contains(arcTime, "分钟前") {
return currentTime
} else {
beforeDay := t.AddDate(0, 0, -1)
return beforeDay.Format("2006-01-02 15:04:05")
}
}
} if strings.Contains(arcTime, "天前") {
pattern := regexp.MustCompile(`\d+`)
afterNumber, err := strconv.Atoi(fmt.Sprint("-", pattern.FindString(arcTime)))
if err != nil {
return fmt.Sprintln(arcTime, "正则提取错误")
} return fmt.Sprintln(t.AddDate(0, 0, afterNumber).Format("2006-01-02 15:04:05"))
} else {
return arcTime
} }

Python版本

# -*- coding: utf-8 -*-
# @Time : 2022/8/19 11:31
# @Author : lzc
# @Email : hybpjx@163.com
# @File : __init__.py.py
# @Software: PyCharm
import operator
from datetime import datetime, timedelta
import re def number_turn_to(input_data):
regex_list = [
{"name": "一", 'value': 1},
{"name": "二", 'value': 2},
{"name": "三", 'value': 3},
{"name": "四", 'value': 4},
{"name": "五", 'value': 5},
{"name": "六", 'value': 6},
{"name": "七", 'value': 7},
{"name": "八", 'value': 8},
{"name": "九", 'value': 9},
{"name": "十", 'value': 10},
] for i1 in regex_list:
for i2 in i1['name']:
input_data = re.sub(i2, str(i1['value']), input_data)
return input_data def hoursBefore_dayBefore_format(arc_time):
arc_time = number_turn_to(arc_time.strip()) time_list = [
"小时前",
"分钟前",
"刚刚",
]
now_time = datetime.strftime(datetime.today(), '%Y-%m-%d')
for t in time_list:
IsContains = operator.contains(arc_time, t)
if IsContains:
now_hour = datetime.strftime(datetime.today(), "%H")
pattern = re.search(r"(\d+)", arc_time) if not pattern:
if arc_time == "刚刚":
return now_time
else:
return "请传入带有数字类型 小时前"
arc_hour = pattern.group(1) if arc_hour <= now_hour:
# 24小时之前,一律替换成当天日期
return now_time
elif "分钟前" in arc_time:
return now_time
else:
arc_time = datetime.strftime(datetime.today() + timedelta(days=-1), '%Y-%m-%d') # 获取前1天日期
return arc_time
if "天前" in arc_time:
try:
d = [str(d) + '天前' for d in range(1, 15)]
arc_time = datetime.strftime(datetime.today() + timedelta(days=(d.index(arc_time) + 1) * -1),
'%Y-%m-%d')
return arc_time
except Exception:
return f"转换失败 当前时间{now_time},网站中的时间{arc_time}" else:
return arc_time if __name__ == '__main__':
print(hoursBefore_dayBefore_format("一天前"))

Golang 和Python 几个小时前 几分钟 几天前的处理的更多相关文章

  1. python 获取几小时之前,几分钟前,几天前,几个月前,及几年前的具体时间

    引入以下两个包: import datetime import arrow 具体代码 # import datetime # import arrow def getTime(self, flag,d ...

  2. 想涨工资吗?那就学习Scala,Golang或Python吧

    [编者按]据薪水调查机构 PayScale 提供的数据显示,掌握 Scala,Golang 和 Python 语言以及诸如 Apache Spark 之类的大数据技术,能带来最大的薪水提升.本文作者为 ...

  3. DES对称加密算法实现:Java,C#,Golang,Python

    数据加密标准(DES,Data Encryption Standard,简写DES)是一种采用块密码加密的对称密钥算法,加密分组长度为64位,其中8.16.24.32.40.48.56.64 等8位是 ...

  4. 2017年的golang、python、php、c++、c、java、Nodejs性能对比(golang python php c++ java Nodejs Performance)

    2017年的golang.python.php.c++.c.java.Nodejs性能对比 本人在PHP/C++/Go/Py时,突发奇想,想把最近主流的编程语言性能作个简单的比较, 至于怎么比,还是不 ...

  5. 2017年的golang、python、php、c++、c、java、Nodejs性能对比[续]

    2017年的golang.python.php.c++.c.java.Nodejs性能对比[续] 最近忙,这个话题放了几天,今天来个续集.   上篇传送门: 2017年的golang.python.p ...

  6. golang与python多线程的并发速度

    一.golang的代码 package main import ( "fmt" "time" ) func Text_goroute(a int, b int) ...

  7. 使用C#把发表的时间改为几个月,几天前,几小时前,几分钟前,或几秒前

    //使用C#把发表的时间改为几个月,几天前,几小时前,几分钟前,或几秒前 //2008年03月15日 星期六 02:35 public string DateStringFromNow(DateTim ...

  8. golang和python互相调用

    http://blog.yuanzhaoyi.cn/2018/06/27/golang_python.html python3-ctypes: https://docs.python.org/3.5/ ...

  9. Golang调用Python

    https://yq.aliyun.com/articles/117329 Python是时髦的机器学习御用开发语言,Golang是大红大紫的新时代后端开发语言.Python很适合让搞算法的写写模型, ...

随机推荐

  1. HCIA-Datacom 3.2 实验二:生成树基础实验

    实验介绍 以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路.但是使用冗余链路会在交换网络上产生环路,引发广播风暴以及MAC地址表不稳定等故障现象,从而导致用户通信质量较差,甚至通信 ...

  2. 新一代分布式实时流处理引擎Flink入门实战之先导理论篇-上

    @ 目录 概述 定义 为什么使用Flink 应用行业和场景 应用行业 应用场景 实时数仓演变 Flink VS Spark 架构 系统架构 术语 无界和有界数据 流式分析基础 分层API 运行模式 作 ...

  3. Vite + TS 项目导入 jQuery 包时报错:Could not find a declaration file

    TypeScript 需要类型标注,当使用第三方库(除 ts 以外写的库,即 js)时,又缺少声明文件,我们需要引用它的声明文件,才能获得对应的代码补全.接口提示等功能.jQuery 不是 TypeS ...

  4. which 和 that 在定语从句中作介词宾语的用法

    关系代词在定语从句中作介词的宾语,且介词在关系代词之前时,关系代词应该用 which:介词在定语从句句末,关系代词可以用 that 或 which. (一)He teaches in a school ...

  5. java方法---定义,调用

    定义,调用 1.方法的定义 方法就是一段用来完成特定功能的代码片段,类似于其它语言的函数. 方法用于定义该类或该类的实例的行为特征和功能实现.方法是类和对象行为特征的抽象. 方法很类似于面向过程中的函 ...

  6. java基础———打印三角形

    代码 public static void main(String[] args) { for (int i = 1; i <= 5; i++) { for (int j = 5; j > ...

  7. 不想当Window的Dialog不是一个好Modal,弹窗翻身记

    弹窗是我们熟视无睹的一种交互方式,经常用到,但从没好好想过这种交互行为背后的意义... 弹窗是Windows的灵魂 Windows的灵魂是什么?当然是Window,当方便快捷的多窗口进入人们视野的时候 ...

  8. KingbaseFlySync ddl变更流程

    关键字: KingbaseFlySync.Linux.x86_64.mips64el.aarch64.Java 一.ddl变更流程 1. 停掉客户业务,保证没有新数据产生 确认Oracle数据库上所有 ...

  9. Windows 10 20H1 2004新功能

    Windows 10的年度更新版本20H1即将问世.目前可以从insider preview渠道中获得.这个版本中看上去对搜索功能做了不小的改进.包括搜索的磁盘占用率以及搜索的一些展示方式. 其它的一 ...

  10. Java SE 19 新增特性

    Java SE 19 新增特性 作者:Grey 原文地址: 博客园:Java SE 19 新增特性 CSDN:Java SE 19 新增特性 源码 源仓库: Github:java_new_featu ...