我在这里问了一个问题。但这是另一个听起来相似的问题。
使用 crawler4j,我想爬取多个限制域名的种子 URL(即在 shouldVisit 中的域名检查)。这是一个如何做到这一点的例子。简而言之,您使用 customData 设置域名列表,然后将其传递给爬虫类(来自控制器),在 shouldVisit 函数中,我们循环访问此数据(这是一个列表,请参见链接的 url)以查看域名是否存在列表,如果是,则返回 true。
这有一个小故障。如果 google.com 和 yahoo.com 在种子 url 域列表的名称中,并且 www.yahoo.com/xyz 链接到 www.google.com/zyx ,它将抓取该页面,因为 www.google.com 在那里在我们的访问域列表中。此外,如果种子 url 的数量很大(数千个),shouldVisit 中的 for 循环可能会很重,并且它也会消耗一些内存。
为了解决这个问题,我可以考虑遍历种子 URL。这可能是这样的:
while(s.next()){
CrawlController controller = new CrawlController(config, pageFetcher, robotstxtServer);
controller.addSeed(some-seed-url);
controller.setCustomData(domain-name-of-seed-url-to-be-checked-in-shouldVisit);
controller.start(MyCrawler.class, numberOfCrawlers);
}
我不确定这是否是一个糟糕的主意,但在性能方面这样做有什么好处/坏处吗?其他顾虑?
编辑 :
我对其进行了测试,似乎这种方法消耗了太多时间(可能是在每个循环中打开和关闭控制器的实例。)希望有其他解决方案。