网页抓取qq(基于文本密度的分析(DOM无关)的评分制筛选算法)

优采云 发布时间: 2022-01-19 05:01

  网页抓取qq(基于文本密度的分析(DOM无关)的评分制筛选算法)

  评委,请轻拍。. .

  我一直对抓取网页内容非常感兴趣。大约三年前,我曾经做过一个“新闻阅读器”。那个时候,我非常喜欢看新闻。嗯,所以我开发了一个浏览器书签插件,用js把页面的body提取出来,通过一个图层覆盖显示在页面上。当时只能想到通过正则表达式搜索目标dom,这也是爬虫最多的。取方法。

  当时这个功能是在分析了网易、新浪、QQ、凤凰等各大门户网站后实现的。这是最笨的方法,但优点是准确率高,缺点是一旦目标页面修改了源代码,可能要重新匹配。

  后来发现自己看的页面越来越多,上面的方法已经不适合我的需要了。但最近因为我开发并需要一个采集助手,我开始寻找解决方案。

  我主要找到了3个解决方案:

  1)基于dom节点的分数筛选算法

  国外有一个叫可读的浏览器书签插件来实现这个,地址:,看到这个我印象很深刻,准确率很高。

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

  这个方法的思路也很好,适用性也比较好。试过用JS来实现,但是能力有限,没有做出匹配度高的成品,所以放弃了。

  3)基于图像识别

  这与 AlphaGo 使用的方法非常接近。通过图像识别,只要对机器人进行足够的训练,就可以做到。其他领域已经有大量案例了,但是没有看到文本识别的具体实现(或者没有找到案例)。)。

  以上是我找到的 3 个实现。

  但是因为我只是一个web开发人员,所以对JS的理解也比较好,其他语言能力也很有限。于是我尝试了基于DOM的过滤,发现readable的实现比较复杂。我想知道是否有更有效的解决方案?

  后来,我发现了一个规律。一般来说,body部分的p标签数量非常多,比其他部分多很多,因为网页的大部分内容都是通过WYSIWYG编辑器发布的,而这些编辑器会生成一个语义兼容的节点。

  于是,我就利用这个规律,开发了一个小爬虫插件,效果还不错。当然,它还是很基础的,需要改进。

  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人工客服


线