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),将无法进行重置。
我正在尝试找出一种在爬行运行时更改种子并完全删除 "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),将无法进行重置。