我找到的3种实现方法,但基于dom节点的评分制筛选算法

优采云 发布时间: 2021-03-22 20:01

  我找到的3种实现方法,但基于dom节点的评分制筛选算法

  请轻拍法官。 。

  我一直对爬网内容非常感兴趣。大约三年前,我曾经做过“新闻阅读器”。那时,我喜欢看新闻。这个想法是,如果您在没有广告的情况下观看新闻,那么您可以保持安静。太好了,所以我开发了一个浏览器书签小部件,该小部件使用js提取页面的主体,然后通过图层封面将其显示在页面上。那时,我唯一想到的就是通过常规规则搜索目标dom。这也是大多数爬网程序的爬网方法。

  当时,此功能是通过分析网易,新浪,QQ和Phoenix等每个主要门户网站来实现的。这是最傻瓜式方法,但是优点是准确性高,但是缺点是一旦修改了目标页面的源代码,就可能不得不重新匹配它。

  后来,我发现我想看越来越多的页面,以上方法不再适合我的需要。但是最近,因为我开发了它并且需要采集助手,所以我开始寻找解决方案。

  我主要找到3种解决方案:

  1)基于dom节点的评分系统筛选算法

  有一个在国外被称为reader的浏览器书签插件可实现此目的。地址:当时我以很高的准确性给我留下了深刻的印象。

  2)基于文本密度的分析(与DOM无关)

  这种方法的想法也很好,其适用性更好。我试图使用JS来实现它。但是我的能力有限,并且我没有生产出匹配度太高的产品,所以我放弃了。

  3)基于图像识别

  这与Alpha Dog使用的方法非常接近。通过图像识别,只要对机器人进行足够的培训就可以完成。在其他领域也有很多案例,但是尚未看到文本识别的具体实现方式(或者没有找到案例)。

  以上是我找到的三种方法。

  但是基于我只是一名Web开发人员的事实,我对JS仅有很好的了解,而我在其他语言方面的能力非常有限。因此,我尝试了基于dom的过滤,并且发现可读的实现相对复杂。我想知道是否有更有效的解决方案?

  后来我发现了一条规则。一般而言,主体部分中的p标签数量非常多,比其他部分要多得多,因为网页的大部分内容都是通过所见即所得编辑器发布的,这些编辑器将生成符合语义的节点。

  因此,我利用了这一规则并开发了一个小型抓取插件,效果很好。当然,它仍然是非常基础的,需要改进。

  var pt = $doc.find("p").siblings().parent();

var l = pt.length - 1;

var e = l;

var arr = [];

while(l>=0){

arr[l] = $(pt[l]).find("p").length;

l--;

}

var temArr = arr.concat();

var newArr = arrSort(arr);

var c = temArr.indexOf(newArr[e]);

content = $(pt[c]).html();

  代码非常简单,但是经过我的测试,可以成功爬网80%以上的网页(主要是文章页)。基于此,我开发了JSpapa采集助手:

  如果您有更好的计划,可以在下面进行讨论。

  如果您需要转载本文,请与作者联系,请注明转载来源

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线