gpt4 book ai didi

java - 有没有办法在爬行过程中清除crawler4j中的访问队列

转载 作者:行者123 更新时间:2023-12-02 02:21:42 24 4
gpt4 key购买 nike

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

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

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()并重新启动一切,但这有点慢。

最佳答案

如果不修改原始源代码(通过派生它或使用 Reflection API),就没有内置功能可以实现此目的。

每个WebCrawler都通过Frontier实例获取新的URL,该实例存储所有网络爬虫的当前(已发现且尚未获取)URL。遗憾的是,该变量在 WebCrawler 中具有 private 访问权限。

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

关于java - 有没有办法在爬行过程中清除crawler4j中的访问队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48407561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com