有没有办法在爬网过程中清除爬虫4j中的访问队列



我正在尝试找出一种方法来在爬网运行时更改种子并完全删除"访问"数据库/队列。

特别是,我想删除队列中的所有当前 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(请参阅源代码(,将无法重置。

相关内容

  • 没有找到相关文章

最新更新