V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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
omg21
V2EX  ›  Python

如何用正则或者 bs4 提取日期?

  •  
  •   omg21 · 2016-06-13 19:42:27 +08:00 · 2613 次点击
    这是一个创建于 3085 天前的主题,其中的信息可能已经有所发展或是发生改变。
    V2EX 不能上传图片真麻烦。
    [网页显示内容]
    北京大学国际法学院(深圳)招聘传讯与市场推广专员 2016-06-13
    中山大学数据科学与计算机学院印鉴教授团队 2016 年 6 月公开招聘 2 名工作人员启事 2016-06-13
    华中科技大学电气学院聚变与等离子体研究所 2016 年 6 月招聘 8 名社会用工 2016-06-13
    杭州师范大学钱江学院 2016 年招聘 1 名化学实验技术人员公告 2016-06-13

    [代码]
    ...
    <li><a href="http://www.pinjiao.com/gaoxiaojiaoshizhaopin/guangdonggaoxiaojiaoshizhaopin/584881.html" title="北京大学国际法学院(深圳)招聘传讯与市场推广专员" target=_blank>北京大学国际法学院(深圳)招聘传讯与市场推广专员</a> <span>2016-06-13</span></li>
    <li><a href="http://www.pinjiao.com/gaoxiaojiaoshizhaopin/guangdonggaoxiaojiaoshizhaopin/584882.html" title="中山大学数据科学与计算机学院印鉴教授团队 2016 年 6 月公开招聘 2 名工作人员启事" target=_blank>中山大学数据科学与计算机学院印鉴教授团队 2016 年 6 月公开招聘 2 名工作人员启事</a> <span>2016-06-13</span></li>
    <li><a href="http://www.pinjiao.com/gaoxiaojiaoshizhaopin/hubeigaoxiaojiaoshizhaopin/584879.html" title="华中科技大学电气学院聚变与等离子体研究所 2016 年 6 月招聘 8 名社会用工" target=_blank>华中科技大学电气学院聚变与等离子体研究所 2016 年 6 月招聘 8 名社会用工</a> <span>2016-06-13</span></li>
    <li><a href="http://www.pinjiao.com/gaoxiaojiaoshizhaopin/zhejianggaoxiaojiaoshizhaopin/584880.html" title="杭州师范大学钱江学院 2016 年招聘 1 名化学实验技术人员公告" target=_blank>杭州师范大学钱江学院 2016 年招聘 1 名化学实验技术人员公告</a> <span>2016-06-13</span></li>

    ...



    我现在想根据页面的日期采集相应的内容,不同的页面挺多的,日期格式也不一样,“ 2016-06-13 ”“ 2016 年 06 月 13 日”“ 06-13 ”格式有好多种,请问如果做一个通用的系统,怎样用正则表达式或者 bs4 把日期提取出来?
    13 条回复    2016-06-13 21:07:57 +08:00
    KentY
        1
    KentY  
       2016-06-13 19:51:13 +08:00
    比如: 中山大学数据科学与计算机学院印鉴教授团队 2016 年 6 月公开招聘 2 名工作人员启事 2016-06-13

    你要取什么? 2016-06-13 还是 "2016 年 6 月"?

    如果是前者,用 beautifulsoup 是可以取 li->span 的东西, 这日期就不就有了吗?
    ETiV
        2
    ETiV  
       2016-06-13 20:09:11 +08:00
    bootstrap4 还在 alpha 吧
    omg21
        3
    omg21  
    OP
       2016-06-13 20:19:40 +08:00
    @KentY 这就是我特意选这条的用意。我的本意是要提取后边的“ 2016-06-13 ”,可是我不想每个页面专门再写代码,现在这个页面是 li->span 的结构,下个页面可能就不是这个结构了。我现在就在琢磨怎么能写个通用的代码一次把几十个页面都查看一遍。
    omg21
        4
    omg21  
    OP
       2016-06-13 20:19:58 +08:00
    @ETiV 是 beautifulsoup4
    sola97
        5
    sola97  
       2016-06-13 20:27:23 +08:00
    \d{4}-\d{2}-\d{2}
    这种?
    sola97
        6
    sola97  
       2016-06-13 20:28:40 +08:00
    @sola97 好吧没看清要求
    (\d{4}.)?\d{2}.\d{2}
    sola97
        7
    sola97  
       2016-06-13 20:34:44 +08:00
    发现我写的都不对,无视吧
    practicer
        8
    practicer  
       2016-06-13 20:38:37 +08:00
    提主你没贴完整的结构,我们怎么帮得了你?我理解的是不是这样,
    1.html 结构不同,日期可能出现在未知层级的元素里
    2.日期格式不同
    你最好都贴出来比较好
    YUX
        9
    YUX  
       2016-06-13 20:47:33 +08:00
    意思是每个页面的 DOM 结构还不一样?其他页面还不是 li->span ?

    最好是把每个页面的结构都看一下才好分析出共通的代码,但好像看题主的意思是只要提取每页形如 yyyy-mm-dd 的日期?拿着就没法 beautifulsoup 了 直接上正则匹配。
    ca1123
        10
    ca1123  
       2016-06-13 20:51:23 +08:00
    你就针对每种日期格式写一个正则呗 计算机又不懂这些字符串啥意思 你无论如何都得教她
    YUX
        11
    YUX  
       2016-06-13 20:52:29 +08:00
    如五楼所说 re.findall("\d{4}-\d{2}-\d{2}",html_content) 就能拿到所有形如 yyyy-mm-dd 的日期
    bertonzh
        12
    bertonzh  
       2016-06-13 20:55:39 +08:00
    /20\d{2}[年\s\-]+[01]?\d[月\s\-]+[0-3]?\d/
    sola97
        13
    sola97  
       2016-06-13 21:07:57 +08:00
    @bertonzh 末尾还要加个[日\s]*,匹配单日期年份还得加个问号....
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2829 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 08:41 · PVG 16:41 · LAX 00:41 · JFK 03:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.