我正在尝试找出一种方法来在爬网运行时更改种子并完全删除"访问"数据库/队列。
特别是,我想删除队列中的所有当前 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
(请参阅源代码(,将无法重置。