整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

爬虫系列之《发布时间》解析

爬虫系列之《发布时间》解析

据采集中,发布时间解析的正确与否,直接关系着使用数据的产品的质量。一般在做做大规模数据爬取时,都会整理一下发布时间规律,如特殊关键字,时间正则等。下面介绍一下,我在工作中处理的具体步骤。

1:收集发布时间标识词

一般情况下,标识发布时间的关键词有:更新时间:、发布日期:、发表时间:、发稿时间:、发布于:、编辑日期:、发布于:等。通过这些特殊关键词,可以高效、准确的判断出时间所在位置,提供解析的准确率。

2:收集发布时间正则

发布时间的正则表达式,一般情况下主要有以下十一种发布时间获取规则:

(\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2})

(\d{2}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2})

(\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2})

(\d{2}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2})

(\d{4}-\d{1,2}-\d{1,2})

(\d{2}-\d{1,2}-\d{1,2})

(\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2})

(\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2})

(\d{1,2}:\d{1,2}:\d{1,2})

(\d{1,2}-\d{1,2})

(\d{1,2}:\d{1,2})

使用的过程中,需要注意这九种表达式的顺序。由于我在使用过程中,发布时间标识词与正则表达式,是在一个系统中统一管理。

所以,对每个标识词和表达式进行了排序,排序值越小,越先处理。如下如: 正则表达式、 关键词。



3:处理特殊时间格式

特殊时间格式如:“分钟前”、“小时前”、“天前”、“周前”、“今天”等。主要把这些时间转换为正常的时间格式,便与后续的解析。


4:HTML源码预处理

1:删除多余的HTML标签

删除meta、style、script、link、select、input、button、img等标签,消除这些标签中的值对解析的影响;


2:特殊标签处理

替换“”、"<span"、“”等为“ ”


3:特殊字符处理

主要是对时间进行统一化、规范化。如“年”、“\”、“/”、“月”等替换为“-”;“日”、"T"等替换为“ ”等;


4:删除HTML所有的标签、特殊符号、字母等


5:根据收集的发布时间说明词,截取HTML源码


if self.keywords !=None:

for kw in self.keywords:

try:

index=0

if kw in html:

index=html.index(kw)

begin=0;

end=len(html)

if(index > 1):

end=index + 100

if index >=100:

begin=index - 100

else:

begin=index

html=html[begin:end]

break

except : print(traceback.format_exc())


6:替换所有的汉字为“ ”,同时规范字符串


5:解析发布时间

1:根据收集的时间正则,解析发布时间

2:根据获取时间时使用的正则,规范发布时间



3:判断当前时间是否合法。主要是判断解析出的时间是否大于当前时间,如果大于,则用当前时间填充。避免影响后续产品的数据使用。

自清先生在《匆匆》一文中,形容时间是在早晨太阳光里悄悄流逝;是在洗手的时候随水流逝去;是在睡觉时小心翼翼的从我们身上跨过,最后我们的日子便一去不复返了。时间对所有人都是公平的,你的一分钟和他们的分钟没有任何区别。但是管理好时间是很重要的。时间线是什么呢?就是以时间点为轴,记录在各个时间点上发生的事情。

时间线的常见用途

时间线的定义很简单,但是用法,目的各不相同,只需根据自己的需求绘制就行。
1.可以用来作为手账的时间轴,记录过去生活里的点点滴滴,看过的电影,走过的路等等。等到下次在看见时,便能回想起那段时光。
2.可以用来规划未来的日程安排,甚至还可以以小时为单位,详细的在井井有条的规划着这一整天的生活。同时也可以督促自己来完成这些任务,成为更好的人。
3.可以用来记录谈恋爱中的每个“第一次”,第一次说我爱你;第一次一起看电影;第一次见家长等等,同记录生活类似,只不过更加具体到了一件事上,通过时间线来将生活数据化,但是看着这些时间点和文字又能回想起当时羞怯的心情。

时间线的例子

下方提供的时间线均为来源于“亿图图示”网站。形式各种各样,保持实用性的同时,也不失美观。

时间线的绘制方法

如何绘制一幅时间线?首先,需要明确这幅时间线是用来记录什么,然后就只需根据按照下列操作步骤,一幅时间线就可绘制完成。

第一步:下载“亿图图示”软件,或者通过浏览器访问在线版亿图图示。打开软件,就可以开始作图了。

第二步:新建一幅时间线。依次点击“商务”-“时间线”,从下方亿图图示所提供的模板中选择一个打开即可。

第三步:在画布左侧有提供多种基本绘图形状,背景和时间线,如果对当前所选模板不满意,便可以从左侧中双击选取适宜的形状,背景和时间线来绘制出一幅新的时间线。

第四步:双击选中画布模板中的文字即可修改。如果需要添加新的文本,可以点击上方的文本按钮来新添一个文字模板。

第五步:时间线绘制完成后,可以点击右上角的保存,打印,导出等按钮。保存绘制完成后的时间线,选择将作品导出为图片,PDF,Excel,HTML等格式。

时间线绘制软件---亿图图示

亿图图示是一款适用于商务办公,战略规划,市场分析,人力资源,工程管理的综合办公绘图软件的国产软件。支持多种电脑系统,也支持线上网页操作绘图。在亿图图示中可以绘制诸如时间线,系统图、组织结构图、商务图表等260余种图表。此外亿图图示也提供十分丰富的模板和例子,这样使用者不用从头一步一步设计绘制,只要选择好适合需求的模板,对其进行适当修改完善,即可绘制出直观大方的图表。当然,也可以全程自行设计页面,选择更多样。

为什么选择亿图图示绘制时间线

1.符合国人需求:亿图图示是一款出生于中国深圳的国产软件,已经经过了16年的更新迭代,作为一款成熟的办公软件亿图图示可以跨平台综合办公绘,而且无论界面或功能上都比较贴合国人的使用习惯,全中文界面简单明了。
2.支持多种格式导入:绘制表格类模板时,不仅可以一键将导入Visio,SVG文件,还可以批量转化Visio文件到Edraw文件,轻松实现文件数据转移,避免时间浪费。
3.支持多种格式导出:除了各种图片格式,亿图图示还支持保存为Html,PDF,SVG,Microsoft Word, PowerPoint,Excel等多种格式。在常见的软件中应用都可以找到与之相匹配的文件格式。
4.软件操作简单舒适,易上手:亿图图示界面简单明了,功能强大。无需自行绘制,因为亿图图示的一大特色便是自带模版,通过拖拽式操作,没有绘画基础的新手也能迅速绘制出有水准的图表。
5.丰富的绘图模板:亿图图示拥有的260中不同类型图标的丰富模板,据统计内置超过26000种图形模板和矢量符号,供用户任意选择,修改完善模板,搭建起符合要求的演示模板。
6.便捷式分享:图表绘制完成后,不仅可以以多种格式保存,用户不会被格式的问题所困扰,还可以一键分享至微信,朋友圈等。此外,新版的亿图图示还提供在线多人协作模式,提升工作效率。

文为原创分享,转载请注明出处。

1、引言

即时通讯IM应用中的聊天消息时间显示是个再常见不过的需求,现在都讲究用户体验,所以时间显示再也不能像传统软件一样简单粗地暴显示成“年/月/日 时:分:秒”这样。所以,市面上几乎所有的IM都会对聊天消息的时间显示格化做人性化处理,从而提升用户体验(使用感受会明显友好)。

这两天正在继续开发RainbowChat-Web产品,所以正需要这样的代码。但经过在即时通讯网的论坛和技术交流群里询问,以及网上的所谓仿微信例子,都不符合要求。这些例子要么简陋粗暴(有逻辑bug硬伤)、要么并不完整(可能只是随手写的练手代码,并不适合放到产品中),所以本着做技术精益求精的态度,没有现成的轮子可用,那就只能造轮子了。

那么,按怎样的显示逻辑来实现呢?作为移动端IM的王者,微信无疑处处是标杆,所以本次的消息时间显示格式,直接参照微信的实现逻辑准没错(随大流虽然没个性,但不至于非主流)。

* 提示:本文中的代码实现,是从 RainbowChat 和 RainbowChat-Web 两个IM产品中扒出来简化后的结果,是基于完全相同的算法逻辑分别用OC、Java和JavaScript实现的。如您觉得有用,可以改改直接用于您的产品,如您有更好的建议请直接回复和评论。代码仅供参考,不足之外,还请见谅!

(本文同步发布于:http://www.52im.net/thread-2371-1-1.html)