精确提取网页中新闻内容是新闻资讯平台的基础,目前新闻资讯平台的内容大多数来源于对其它新闻网站内容的抓取、整理和分类,所以如何精确提取网页中的新闻就显得非常重要啦~
方法一:《基于行块分布函数的通用网页正文抽取》
它的思想是,一个主题类网页(我们这里是新闻)详情页只有一个数据区域,只要提取出这个数据区域就行了;找到这个数据区域的方法是,对网页内容分块,一块是指从某一行开始至某一行结束的区域,举个例子,第n块由第n行、n+1行和n+2行组成,第n+1块由第n+1行、n+2行和n+3行组成,然后提取出每一块中的纯文本,其中纯文本最多的那一块一定包含在正文之中;找到了之中的某一块,就可以利用这部分内容来找到正文边界了,文中指出,主题类网页的正文部分纯文本很多,而其它部分则较少,可以从之前定位到那一个块的位置开始往前往后找,找到的纯文本数量骤降点,就是边界了;最终利用边界信息提取出正文。这个方法能够准确的提取出大部分新闻的正文,但在正文最后包含一些杂质信息。而且,该方法也真的只能提取出正文,难以提取出与正文相关的那些非常重要的信息,也就是新闻的标题、来源、时间和标题与正文之间的图片。
方法二:Readability算法
它的主要思想是,通过给定网页构建一棵DOM树,对其中body节点子树中的每一个后代节点打分,获得得分满足要求的节点,这些节点包含读者想读的内容,然后把这些节点整理为一个网页返回。用该算法的Java实现处理上面的示例新闻,结果跟上一种方法差不多。不过,通过DOM树,可以容易用另外的方式获得新闻的时间和来源。新闻时间可以通过在标题和正文之间的内容上通过正则表达式匹配出来;来源则可以在标题和正文之间的内容上通过“来源”关键字找出,并把找到的来源存储起来,用于在这部分内容中没有“来源”关键字的时候去匹配来源;最终解决问题。如果它对任何新闻类网页都只是不能提取新闻的来源和时间的话,那它就已经能满足精确提取新闻内容的要求了,可是,它还有其它问题,比如,大部分情况下会丢失新闻标题和正文之间的图片等信息,有时在正文之后还会存在另外一些不需要的信息(二维码图片,版权信息等)。同样,核心问题在于信息丢失。
方法三:RoadRunner算法
这个算法试图从一组由相同模板生成的网页中发现模板,然后用这个模版去解析由这个模板生成的其它网页。(目前不太好操作)