将基本crawler4j转换为焦点抓取工具

时间:2014-11-06 05:12:14

标签: web-crawler crawler4j

我已经实现了一个基本的抓取工具,可以从种子网址中检索数据并能够下载这些网页。此外,我能够将我的爬虫保持在同一种子网站,直到达到指定的深度。 如果仅在通过预定义关键字的最低阈值时才下载页面,我如何对我的抓取工具施加更多限制? 在shouldvisit()函数中是否有这样的方法?

1 个答案:

答案 0 :(得分:1)

不幸的是,您有一个不可能的约束,这是爬虫的标准。您必须下载该页面才能确定它是否包含您要查找的关键字。与大多数抓取工具一样,crawler4j只能对他们下载的数据进行操作,对于尚未抓取的页面,它只知道其URL字符串,但通常不包含某些关键字。

    public boolean shouldVisit(WebURL url)

确实是唯一可以做出决定的官方地点(即,无需修改原始库),您必须以URL为基础。

但是,如果您在下载页面之前必须了解关键字,可以考虑使用像Bing这样的第三方Web服务API对公共网页进行索引,并尝试查看该网页的搜索结果是否包含关键字寻找 - 但这只适用于像Bing这样的服务可以访问的公共站点。您还需要权衡查询Bing的优缺点,而不仅仅是自己下载页面,其中大多数情况下自己下载它可能更有意义。

最后一个想法,以防我误读了你。如果您的意思是不再根据您刚刚下载的页面下载任何链接/页面(例如,不要再访问第X页上的任何其他链接,因为页面X不包含正确的关键字,因此此页面上的链接被认为是错误的)。如果是这种情况,您必须从某个中央数据存储区(如数据库)访问父URL,并检查是否应在以下位置访问它:

    public boolean shouldVisit(WebURL url)

如果您将所述信息添加到中央数据存储区:

    public void visit(Page page)

方法。无论shouldVisit是确定爬虫是否应该获取内容的最终方法。默认情况下,您只需要在其中提供的URL信息,或者您尝试使用的其他任何内容(如您自己的填充数据存储区或第三方API)。最后一个警告是,如果您确实使用了集中式数据存储区或第三方API,则crawler4j是多线程的,因此您希望在从shouldVisit方法访问任何内容时将其考虑在内。