1
dxwwym 2017-02-24 20:55:59 +08:00 via iPhone
页面源码应该是时间,用 js 改的相对时间
|
2
ineed 2017-02-24 20:57:59 +08:00 via Android
js 可以用 moment.js
|
4
c4pt0r 2017-02-24 21:06:24 +08:00
那么简单的文法,手写一下 parser 咯,前段时间刚好写了个简单的 lexer 和 parser
https://github.com/c4pt0r/calbot |
6
slysly759 2017-02-24 21:32:45 +08:00 via Android
懒的后端不写直接传 json 带时间戳
前端 js 转换 if 判断 勤快点的就后台梳理这么写的 反正我就是这么写的 不知道你为啥有这个需求。。。 |
8
chroming 2017-02-24 22:07:14 +08:00 via iPhone
爬虫爬取网页会遇到这样的处理需求。没查过有没有现成轮子,要自己写的话就是匹配一下文字再转换就可以了
|
9
sfree2005 2017-02-24 22:13:05 +08:00 via iPhone
我没有写过爬虫,但如果可能,直接爬服务器返回的 json ,时间戳一般可以在里面找到。我写后端的时候就返回时间戳,到了前端我会用 moment.js 转成“ 3 小时前”之类的表达
|
10
fy 2017-02-24 22:13:50 +08:00
实际上你爬虫爬这种数据,多半能在目标附近找到一个标准时间或者是时间戳。
可以简单 parse 一下,然后用 pytime 这个库走一波就行了。 |
11
noNOno 2017-02-24 22:17:27 +08:00
如果可以到数据库,那么同时保存一个入库时间,用 sql 处理>入库时间减去'N'分钟 where 包含 '分钟前'
以此类推就可以了 |
13
noNOno 2017-02-24 22:19:25 +08:00
你是不是抓的视频网站。。。。
|
15
BiggerLonger 2017-02-24 22:23:15 +08:00 via Android
python arrow
|
16
noNOno 2017-02-24 22:23:44 +08:00
那就 同时获取你爬取到那条数据的时间,然后减去 'X 小时' 就可以了。就是要加个计算,我目前就是这样在数据库层面离线处理
|
17
sfree2005 2017-02-24 22:26:18 +08:00 via iPhone
@devzero 你看网站 HTML 源码是写死的 但有没有查过 Chrome dev tool 里面的 network 标签?如果这里面也没有那只能肯定那个是后端处理了。即使你通过转换,得到的时间都只是大概的
|
18
HanSonJ 2017-02-24 22:30:18 +08:00
|
19
HanSonJ 2017-02-24 22:31:35 +08:00
没看认真题主问题 - -, 忽略我。。。
|
20
polythene 2017-02-24 22:38:54 +08:00 2
@chroming 刚写了一个工具,用来将自然语言中的时间信息提取出来,再转化成具体的时间,可以参考一下:
https://github.com/polyrabbit/WeCron/blob/master/WeCron/wxhook/todo_parser/local_parser.py |
22
mringg 2017-02-24 22:51:01 +08:00 via iPhone
我更喜欢 shell
|
23
qhxin 2017-02-24 23:03:01 +08:00 via Android
strtotime php 是世界上最好的语言
|
24
sunchen 2017-02-24 23:09:16 +08:00
自己算一下呗,算个大概时间
|
25
FreeDog 2017-02-24 23:10:12 +08:00
总共就那些固定格式,收集、判断、提取字符串转换下即可
|
26
FreeDog 2017-02-24 23:10:43 +08:00
做好了可以传到 pip 或者 GitHub 上~ 应该不少人会用到
|
27
onlyhot 2017-02-24 23:12:43 +08:00 via iPhone
已经有人说过了 我再说一遍 php 是最好的语言..
|
28
cxbig 2017-02-24 23:14:50 +08:00
具体分析下咯
看看这个内容的背后是什么机制驱动的,如果是纯前端,多半在什么地方有时间戳,只要数据不是藏在闭包里,还是有机会拿到的 实在不行,要求不是那么精确的话,根据文法用正则翻译一下 如“一小时以前”可以变成 date.today() - timedelta(hours = 1)什么的 |
29
falcon05 2017-02-24 23:18:08 +08:00 via iPhone
写个 strtotime 的 PHP 脚本, Python 里调用 PHP 脚本获取结果,(逃
|
31
sobigfish 2017-02-24 23:32:33 +08:00 1
因为最终大多数都变成多少天前,所以你这个数据的精度要不了那么高吧,直接算日子,省略时间吧
|
34
devzero OP @BiggerLonger 是用 arrow.get 么...
|
35
trcnkq 2017-02-25 01:31:34 +08:00 1
这里其实隐含了另一个问题:“ 5 分钟前”“ 3 小时前”“两天前”表示的精度是不一样的,都转化成一个精确到秒且没有其他信息的数据并不合适。
|
36
malcolmyu 2017-02-25 01:57:28 +08:00
|
37
precisi0nux 2017-02-25 06:16:32 +08:00 via iPhone
@falcon05 php 有更好的实现, Carbon
|
38
ikaros 2017-02-25 10:06:16 +08:00
我觉得问题在于不同的网站都各有一套显示规则,还不止这个显示方式,新闻抓取就这毛病
|
39
xiaonengshou 2017-02-25 10:19:59 +08:00
竟然有人妄图让后端转换这些东西。。。如果在实际项目里,后端转换了,这个项目就废了
|
40
noNOno 2017-02-25 10:30:58 +08:00
@xiaonengshou 看需求,如果爬下来的数据是要离线分析用, ETL 时处理也没什么
|
41
klxq15 2017-02-25 11:33:09 +08:00 via Android
在爬 weibo 的数据时也遇到这个问题,以前的 json 接口带时间戳,不过那个接口废了,新接口只有这样的时间
|
42
sefemp 2017-02-25 14:55:16 +08:00 via Android
如果爬的够勤快,理论上只需要处理分钟即可
|
43
southwolf 2017-02-25 19:05:20 +08:00
@xiaonengshou 通常就是后端转换的啊
|
44
southwolf 2017-02-25 19:09:12 +08:00
@xiaonengshou 比如最方便的 Rails 直接提供 time_ago_in_words 方法…
|
46
dofine 2017-02-26 15:23:49 +08:00
Python 可以用 pendulum
https://github.com/sdispater/pendulum ``` >>> past = pendulum.now().subtract(minutes=2) >>> past.diff_for_humans() >>> '2 minutes ago' ``` |
48
why1 2017-02-26 23:03:51 +08:00 via Android
爬附件的上传时间
|