网页qq抓取什么原理(我找到的3种实现方法(1)(图))
优采云 发布时间: 2021-11-30 09:14网页qq抓取什么原理(我找到的3种实现方法(1)(图))
OSC 年度开源问卷新鲜出炉。您的回答对我们非常重要。参与开源,可以从这份问卷开始>>>
请轻轻拍拍警官。. .
我一直对网络内容的抓取非常感兴趣。大约三年前,我曾经做过一个“新闻阅读器”。那个时候,我喜欢看新闻。这个想法是,如果你在没有广告的情况下观看新闻,你可以更安静地观看。好的,所以我开发了一个浏览器书签小部件,它使用js提取页面的正文,然后通过图层覆盖将其显示在页面上。当时唯一能想到的就是通过regular找到目标dom,也是爬虫最多的。爬行法。
当时,这个功能是通过对网易、新浪、QQ、凤凰等各大门户网站的分析来实现的。这是最笨的方法,但优点是准确率高,缺点是一旦修改了目标页面的源代码,可能需要重新匹配。
后来发现想看的页面越来越多,上面的方法已经不适合我的需求了。但是最近因为自己开发了,需要一个采集助手,就开始寻找解决方案。
我主要找到了3个解决方案:
1)基于dom节点的评分系统筛选算法
国外有一个叫做 readable 的浏览器书签插件可以做到这一点。地址:当时看到这个我很惊讶,准确率很高。
2)基于文本密度的分析(与DOM无关)
这个方法的思路也很好,适用性比较好,我尝试用JS来实现,但是能力有限,没有做出匹配度太高的产品,所以放弃了。
3)基于图像识别
这与阿尔法狗使用的方法非常接近。通过图像识别,只要对机器人进行足够的训练就可以做到。其他领域已经有大量案例,但是还没有看到文本识别的具体实现(或者没有找到案例))。
以上是我找到的3种实现方式。
但是基于我只是一个web开发者的事实,我对JS只有很好的理解,其他语言的能力非常有限。于是尝试了基于dom的过滤,看到ready的实现还是比较复杂的。我想知道是否有更有效的解决方案?
后来,我发现了一个规律。一般来说,body部分的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 采集助手:
如果您对此有更好的计划,可以在下面讨论。
如需转载本文,请联系作者,请注明出处