网页抓取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 集合助手:
如果您对此有更好的解决方案,可以在下面进行探索。
如需转载本文请联系作者,并注明出处