在大数据时代的互联网数据采集中,数据解析
大数据时代,互联网一直是数据获取的主要途径。一般做舆情分析时,我们需要从互联网上获取和我们分析主图相关的所有数据,如各家媒体的报道、各个自媒体人的观点、社会大众茶余饭后的八卦新闻等等,各种各样的数据。
这些数据就构成了我们舆情分析的基石。那么数据采集时应该注意哪些要素呢?
第一:标题解析
数据采集中,标题的处理相对来说比较容易,一般可以通过一下三种方法来获取。
第一种:采集列表或者URL时,记录下A标签的内容,然后在采集正文时再来二次分析标题的完整性。因为列表中或A标签中的内容,有可能是部分,未显示完全;第二种:就是在解析网页正文时,使用HTML中的title标签的值,作为该条信息的标题。但是这种方法,错误较大,而且获取的标题往往或有干扰内容,如以_XXX网站结尾。第三种:使用H标签中的内容作为标题。但是这种方式有个弊端,因为H标签可能会有很多个,第一个并非一定是标题。
以上三种方法中,最靠谱、最省事、最高效的就是第一种方式。列表或者A标签中获取,在使用第二和第三种方式,来校验、补充。
第二:内容解析
内容的解析比价麻烦,没有什么固定方式。如果你用Python开发爬虫脚本,那么可以使用BeautifulSoup、HTMLParser、python-goose、等一些现成的插件。最近有一个大牛写了一个开源的插件GNE,大家可以试试,今天主要介绍一下我现在使用的方法:基于文本密度算法提取正文。
前提:假设网页内容是没有经过压缩的,就是网页有正常的换行的。
有些新闻网页,可能新闻的文本内容比较短,但其中嵌入一个视频文件,因此,我会给予视频较高的权重;这同样适用于图片,这里有一个不足,应该是要根据图片显示的大小来决定权重的,但本文的方法未能实现这一点。
由于导航等这些非正文内容通,常以超链接的方式出现,因此文本将给予超链接的文本权重为零。
这里假设正文的内容是连续的,中间不包含非正文的内容,因此实际上,提取正文内容,就是找出正文内容的开始和结束的位置。
处理步骤如下:
1:首先清除网页中CSS,Javascript,注释,Meta,Ins这些标签里面的内容,清除空白行。
2:计算每一个行的经过处理的数值
3:计算上面得出的每行文本数的最大正子串的开始结束位置
其中第二步需要说明一下:
对于每一行,我们需要计算一个数值,这个数值的计算如下:
一个图片标签img,相当于出现长度为50字符的文本(给予的权重),x1,一个视频标签embed,相当于出现长度为字符的文本,x2一行内所有链接的标签a的文本长度x3,其他标签的文本长度x4每行的数值=50*x1其出现次数+*x2其出现次数+x4–8
说明:-8因为我们要计算一个最大正子串,因此要减去一个正数,至于这个数应该多大,我想还是按经验来吧。
第三:发布时间解析
数据采集中,发布时间解析的正确与否,直接关系着使用数据的产品的质量。一般在做做大规模数据爬取时,都会整理一下发布时间规律,如特殊关键字,时间正则等。下面介绍一下,我在工作中处理的具体步骤。
1:收集发布时间标识词
一般情况下,标识发布时间的关键词有:更新时间:、发布日期:、发表时间:、发稿时间:、发布于:、编辑日期:、发布于:等。通过这些特殊关键词,可以高效、准确的判断出时间所在位置,提供解析的准确率。
2:收集发布时间正则
发布时间的正则表达式,一般情况下主要有一下九种:(\d{4}-\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{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2})(\d{4}-\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{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源码
ifself.keywords!=None:forkwinself.keywords:try:index=0ifkwinhtml:index=html.index(kw)if(index1):begin=0end=index+ifindex=:begin=index-else:begin=indexhtml=html[begin:end]breakexcept:print(traceback.format_exc())
6:替换所有的汉字为空“”,同时规范字符串
5:解析发布时间
1:根据收集的时间正则,解析发布时间2:根据获取时间时使用的正则,规范发布时间
3:判断当前时间是否合法。主要是判断解析出的时间是否大于当前时间,如果大于,则用当前时间填充。避免影响后续产品的数据使用。
今天就介绍这些,大家有什么想法可以留言哦!
- 上一篇文章: 火车采集器和八爪鱼采集器的区别优势剖析
- 下一篇文章: 没有了