crawler4j中爬行时有没有办法清空to visit队列

Is there a way to clear the to visit queue in crawler4j during crawling

我正在尝试找出一种在爬行运行时更改种子并完全删除 "to visit" database/queue.

的方法

特别是,我想删除队列中的所有当前 url 并添加一个新种子。大致如下:

public class MyCrawler extends WebCrawler {

private int discarded = 0;

@Override
public boolean shouldVisit(Page referringPage, WebURL url) {
    boolean isDiscarded = checkPage(referringPage,url);
    if(isDiscarded){
        this.discarded++;
        if(discarded >= 100){
            //Clear all the urls that need to be visited
            ?_____?
            //Add the new seed
            this.myController.addSeed("http://new_seed.com");
            discarded = 0;
        }
    }
    return isDiscarded;
}

....

我知道我可以调用 controller.shutdown() 并重新开始一切,但速度有点慢。

没有内置功能可以实现这一点,而无需修改原始源代码(通过分叉或使用反射API).

每个 WebCrawler 通过 Frontier 实例获取新的 URL,该实例存储所有网络爬虫的当前(已发现但尚未获取的)URL。遗憾的是,此变量在 WebCrawler.

中具有 private 访问权限

如果要删除所有当前 URL,您需要重置Frontier 对象。如果不实施提供此功能的自定义 Frontier(请参阅 source code),将无法进行重置。