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 没看认真题主问题 - -, 忽略我。。。 |
![]() | 20 polythene 2017-02-24 22:38:54 +08:00 ![]() @chroming 刚写了一个工具,用来将自然语言中的时间信息提取出来,再转化成具体的时间,可以参考一下: https://github.com/polyrabbit/WeCron/blob/master/WeCron/wxhook/todo_parser/local_parser.py |
![]() | 22 ming2050 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 GG668v26Fd55CP5W 2017-02-24 23:18:08 +08:00 via iPhone 写个 strtotime 的 PHP 脚本, Python 里调用 PHP 脚本获取结果,(逃 |
![]() | 31 run2 2017-02-24 23:32:33 +08:00 ![]() 因为最终大多数都变成多少天前,所以你这个数据的精度要不了那么高吧,直接算日子,省略时间吧 |
34 devzero OP @BiggerLonger 是用 arrow.get 么... |
![]() | 35 trcnkq 2017-02-25 01:31:34 +08:00 ![]() 这里其实隐含了另一个问题:“ 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 爬附件的上传时间 |