我已经实现了一个基本的爬网程序,它从种子URL中检索数据并能够下载页面。此外,我可以将我的爬虫放在同一个种子网站上,直到达到指定的深度。只有通过预定义关键字的最小阈值,才能像下载页面一样对我的爬网程序施加更多限制shouldvisit()函数中有这样的方法吗
不幸的是,您有一个不可能的约束,这是爬网程序的标准约束。您必须下载该页面才能确定它是否包含您要查找的关键字。与大多数爬网程序一样,爬网程序4j只能对他们下载的数据进行操作,对于尚未爬网的页面,它只知道其URL字符串,该字符串可以但通常不包含某些关键字。
public boolean shouldVisit(WebURL url)
确实是唯一一个官方的地方(即,在不修改原始库的情况下),您可以在这里做出决定,并且您必须基于URL。
然而,如果出于某种原因,你必须在下载该页面之前了解关键词,你可以考虑使用像必应这样的第三方网络服务API,该服务为公共网页编制索引,并尝试查看他们对该页面的搜索结果是否包含你正在查找的关键词,但这只适用于像必应等服务可以访问的公共网站。你还需要权衡查询必应与自己下载页面的利弊,在大多数情况下,自己下载可能更有意义。
最后一个想法,以防我误解了你。如果您打算不再下载基于您刚刚下载的页面的任何链接/页面(例如,不要访问第X页上的任何链接,因为第X页没有包含正确的关键字,因此该页面上的链接被认为是坏的)。如果是这种情况,您必须从某个中央数据存储(如数据库)访问父URL,并检查是否应该在:中访问它
public boolean shouldVisit(WebURL url)
如果您将所述信息添加到中的中央数据存储
public void visit(Page page)
方法。无论如何,shouldVisit是确定爬网程序是否应该获取内容的最终方法。默认情况下,您所要做的只是那里提供的URL信息,或者您尝试使用的任何其他信息,如您自己填充的数据存储或第三方API。最后一个警告是,如果您确实使用了集中式数据存储或第三方API,crawler4j是多线程的,所以在访问shouldVisit方法中的任何内容时都要考虑到这一点。