推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
devzero
V2EX  ›  Python

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

  •  
  •   devzero · Feb 24, 2017 via Android · 8000 views
    This topic created in 3543 days ago, the information mentioned may be changed or developed.
    爬到如题的一些关于时间的描述,不知道如何转换为当前计算机的时间
    Supplement 1  ·  Feb 26, 2017
    听大家说想想也对, x 分钟前, x 小时前当作当天处理, x 天前减去 x 天, x 星期前就减去 7 乘 x ,再往后就是 yyyy-mm-dd 的格式,就好处理了,多谢大家
    48 replies  •  2017-02-26 23:03:51 +08:00
    dxwwym
    dxwwym
    Feb 24, 2017 via iPhone
    1
    页面源码应该是时间,用 js 改的相对时间
    ineed
    ineed
    Feb 24, 2017 via Android
    2
    js 可以用 moment.js
    devzero
    devzero
    OP
    Feb 24, 2017 via Android
    3
    @dxwwym 并没有
    c4pt0r
    c4pt0r
    Feb 24, 2017
    4
    那么简单的文法,手写一下 parser 咯,前段时间刚好写了个简单的 lexer 和 parser
    https://github.com/c4pt0r/calbot
    knightdf
    knightdf
    Feb 24, 2017
    5
    @c4pt0r Don't panic, :)
    slysly759
    slysly759
    Feb 24, 2017 via Android
    6
    懒的后端不写直接传 json 带时间戳
    前端 js 转换 if 判断
    勤快点的就后台梳理这么写的
    反正我就是这么写的

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

    可以简单 parse 一下,然后用 pytime 这个库走一波就行了。
    noNOno
    noNOno
    Feb 24, 2017
    11
    如果可以到数据库,那么同时保存一个入库时间,用 sql 处理>入库时间减去'N'分钟 where 包含 '分钟前'
    以此类推就可以了
    devzero
    devzero
    OP
    Feb 24, 2017 via Android
    12
    @sfree2005 很可惜是写死在网页里的
    noNOno
    noNOno
    Feb 24, 2017
    13
    你是不是抓的视频网站。。。。
    devzero
    devzero
    OP
    Feb 24, 2017 via Android
    14
    @noNOno 我是爬到的数据😂
    BiggerLonger
    BiggerLonger
    Feb 24, 2017 via Android
    15
    python arrow
    noNOno
    noNOno
    Feb 24, 2017
    16
    那就 同时获取你爬取到那条数据的时间,然后减去 'X 小时' 就可以了。就是要加个计算,我目前就是这样在数据库层面离线处理
    sfree2005
    sfree2005
    Feb 24, 2017 via iPhone
    17
    @devzero 你看网站 HTML 源码是写死的 但有没有查过 Chrome dev tool 里面的 network 标签?如果这里面也没有那只能肯定那个是后端处理了。即使你通过转换,得到的时间都只是大概的
    HanSonJ
    HanSonJ
    Feb 24, 2017
    19
    没看认真题主问题 - -, 忽略我。。。
    polythene
    polythene
    Feb 24, 2017❤️2
    20
    @chroming 刚写了一个工具,用来将自然语言中的时间信息提取出来,再转化成具体的时间,可以参考一下:
    https://github.com/polyrabbit/WeCron/blob/master/WeCron/wxhook/todo_parser/local_parser.py
    devzero
    devzero
    OP
    Feb 24, 2017 via Android
    21
    @sfree2005 嗯,确认了
    嘛,至少比日期精确
    ming2050
    ming2050
    Feb 24, 2017 via iPhone
    22
    我更喜欢 shell
    qhxin
    qhxin
    Feb 24, 2017 via Android
    23
    strtotime php 是世界上最好的语言
    sunchen
    sunchen
    Feb 24, 2017
    24
    自己算一下呗,算个大概时间
    FreeDog
    FreeDog
    Feb 24, 2017
    25
    总共就那些固定格式,收集、判断、提取字符串转换下即可
    FreeDog
    FreeDog
    Feb 24, 2017
    26
    做好了可以传到 pip 或者 GitHub 上~ 应该不少人会用到
    onlyhot
    onlyhot
    Feb 24, 2017 via iPhone
    27
    已经有人说过了 我再说一遍 php 是最好的语言..
    cxbig
    cxbig
    Feb 24, 2017
    28
    具体分析下咯
    看看这个内容的背后是什么机制驱动的,如果是纯前端,多半在什么地方有时间戳,只要数据不是藏在闭包里,还是有机会拿到的
    实在不行,要求不是那么精确的话,根据文法用正则翻译一下
    如“一小时以前”可以变成 date.today() - timedelta(hours = 1)什么的
    GG668v26Fd55CP5W
    GG668v26Fd55CP5W
    Feb 24, 2017 via iPhone
    29
    写个 strtotime 的 PHP 脚本, Python 里调用 PHP 脚本获取结果,(逃
    nightv2
    nightv2
    Feb 24, 2017 via Android
    30
    @cxbig v2 的也包含时间戳么?
    run2
    run2
    Feb 24, 2017❤️1
    31
    因为最终大多数都变成多少天前,所以你这个数据的精度要不了那么高吧,直接算日子,省略时间吧
    devzero
    devzero
    OP
    Feb 24, 2017 via Android
    32
    @sobigfish 😂说得也是
    cxbig
    cxbig
    Feb 24, 2017
    33
    @nightv2 没仔细研究,看上去是没有实时更新的。不过精确到分钟,想来精度是够用的。
    devzero
    devzero
    OP
    Feb 24, 2017 via Android
    34
    @BiggerLonger 是用 arrow.get 么...
    trcnkq
    trcnkq
    Feb 25, 2017❤️1
    35
    这里其实隐含了另一个问题:“ 5 分钟前”“ 3 小时前”“两天前”表示的精度是不一样的,都转化成一个精确到秒且没有其他信息的数据并不合适。
    precisi0nux
    precisi0nux
    Feb 25, 2017 via iPhone
    37
    @falcon05 php 有更好的实现, Carbon
    ikaros
    ikaros
    Feb 25, 2017
    38
    我觉得问题在于不同的网站都各有一套显示规则,还不止这个显示方式,新闻抓取就这毛病
    xiaonengshou
    xiaonengshou
    Feb 25, 2017
    39
    竟然有人妄图让后端转换这些东西。。。如果在实际项目里,后端转换了,这个项目就废了
    noNOno
    noNOno
    Feb 25, 2017
    40
    @xiaonengshou 看需求,如果爬下来的数据是要离线分析用, ETL 时处理也没什么
    klxq15
    klxq15
    Feb 25, 2017 via Android
    41
    在爬 weibo 的数据时也遇到这个问题,以前的 json 接口带时间戳,不过那个接口废了,新接口只有这样的时间
    sefemp
    sefemp
    Feb 25, 2017 via Android
    42
    如果爬的够勤快,理论上只需要处理分钟即可
    southwolf
    southwolf
    Feb 25, 2017
    43
    @xiaonengshou 通常就是后端转换的啊
    southwolf
    southwolf
    Feb 25, 2017
    44
    @xiaonengshou 比如最方便的 Rails 直接提供 time_ago_in_words 方法…
    jon
    jon
    Feb 26, 2017 via Android
    45
    @falcon05 php 不愧是最好的语言
    dofine
    dofine
    Feb 26, 2017
    46
    Python 可以用 pendulum
    https://github.com/sdispater/pendulum

    ```
    >>> past = pendulum.now().subtract(minutes=2)
    >>> past.diff_for_humans()
    >>> '2 minutes ago'
    ```
    devzero
    devzero
    OP
    Feb 26, 2017 via Android
    47
    @dofine 昂...我是要逆转换
    why1
    why1
    Feb 26, 2017 via Android
    48
    爬附件的上传时间
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   804 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 74ms · UTC 18:51 · PVG 02:51 · LAX 10:51 · JFK 13:51
    ♥ Do have faith in what you're doing.