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

2016-06-13 19:42:27 +08:00
 omg21
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 把日期提取出来?
2611 次点击
所在节点    Python
13 条回复
KentY
2016-06-13 19:51:13 +08:00
比如: 中山大学数据科学与计算机学院印鉴教授团队 2016 年 6 月公开招聘 2 名工作人员启事 2016-06-13

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

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

最好是把每个页面的结构都看一下才好分析出共通的代码,但好像看题主的意思是只要提取每页形如 yyyy-mm-dd 的日期?拿着就没法 beautifulsoup 了 直接上正则匹配。
ca1123
2016-06-13 20:51:23 +08:00
你就针对每种日期格式写一个正则呗 计算机又不懂这些字符串啥意思 你无论如何都得教她
YUX
2016-06-13 20:52:29 +08:00
如五楼所说 re.findall("\d{4}-\d{2}-\d{2}",html_content) 就能拿到所有形如 yyyy-mm-dd 的日期
bertonzh
2016-06-13 20:55:39 +08:00
/20\d{2}[年\s\-]+[01]?\d[月\s\-]+[0-3]?\d/
sola97
2016-06-13 21:07:57 +08:00
@bertonzh 末尾还要加个[日\s]*,匹配单日期年份还得加个问号....

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

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

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

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

© 2021 V2EX