如何处理诸如“5 分钟前”“3 小时前”“两天前”这样的时间

2017-02-24 20:50:45 +08:00
 devzero
爬到如题的一些关于时间的描述,不知道如何转换为当前计算机的时间
6537 次点击
所在节点    Python
48 条回复
dxwwym
2017-02-24 20:55:59 +08:00
页面源码应该是时间,用 js 改的相对时间
ineed
2017-02-24 20:57:59 +08:00
js 可以用 moment.js
devzero
2017-02-24 21:03:14 +08:00
@dxwwym 并没有
c4pt0r
2017-02-24 21:06:24 +08:00
那么简单的文法,手写一下 parser 咯,前段时间刚好写了个简单的 lexer 和 parser
https://github.com/c4pt0r/calbot
knightdf
2017-02-24 21:14:35 +08:00
@c4pt0r Don't panic, :)
slysly759
2017-02-24 21:32:45 +08:00
懒的后端不写直接传 json 带时间戳
前端 js 转换 if 判断
勤快点的就后台梳理这么写的
反正我就是这么写的

不知道你为啥有这个需求。。。
devzero
2017-02-24 22:02:10 +08:00
@slysly759 我也很无奈啊
chroming
2017-02-24 22:07:14 +08:00
爬虫爬取网页会遇到这样的处理需求。没查过有没有现成轮子,要自己写的话就是匹配一下文字再转换就可以了
sfree2005
2017-02-24 22:13:05 +08:00
我没有写过爬虫,但如果可能,直接爬服务器返回的 json ,时间戳一般可以在里面找到。我写后端的时候就返回时间戳,到了前端我会用 moment.js 转成“ 3 小时前”之类的表达
fy
2017-02-24 22:13:50 +08:00
实际上你爬虫爬这种数据,多半能在目标附近找到一个标准时间或者是时间戳。

可以简单 parse 一下,然后用 pytime 这个库走一波就行了。
noNOno
2017-02-24 22:17:27 +08:00
如果可以到数据库,那么同时保存一个入库时间,用 sql 处理>入库时间减去'N'分钟 where 包含 '分钟前'
以此类推就可以了
devzero
2017-02-24 22:18:51 +08:00
@sfree2005 很可惜是写死在网页里的
noNOno
2017-02-24 22:19:25 +08:00
你是不是抓的视频网站。。。。
devzero
2017-02-24 22:20:54 +08:00
@noNOno 我是爬到的数据😂
BiggerLonger
2017-02-24 22:23:15 +08:00
python arrow
noNOno
2017-02-24 22:23:44 +08:00
那就 同时获取你爬取到那条数据的时间,然后减去 'X 小时' 就可以了。就是要加个计算,我目前就是这样在数据库层面离线处理
sfree2005
2017-02-24 22:26:18 +08:00
@devzero 你看网站 HTML 源码是写死的 但有没有查过 Chrome dev tool 里面的 network 标签?如果这里面也没有那只能肯定那个是后端处理了。即使你通过转换,得到的时间都只是大概的
HanSonJ
2017-02-24 22:30:18 +08:00
HanSonJ
2017-02-24 22:31:35 +08:00
没看认真题主问题 - -, 忽略我。。。
polythene
2017-02-24 22:38:54 +08:00
@chroming 刚写了一个工具,用来将自然语言中的时间信息提取出来,再转化成具体的时间,可以参考一下:
https://github.com/polyrabbit/WeCron/blob/master/WeCron/wxhook/todo_parser/local_parser.py

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/343007

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX