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

标签 java web-crawler crawler4j

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

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

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/

相关文章:

python - Docker Selenium Chromedriver : Unfortunately, 自动访问此页面被拒绝

java - 语法错误,插入 "... VariableDeclaratorId"以完成 FormalParameterList

java - Feign 客户端在 Spring boot/Crawler4j 应用程序中总是抛出空指针异常

java - 如何将特定 URL 更改为子 URL

java - 具有两个不同整数对象数组的 add 方法

java - 在java中使用htmlworker将html转换为pdf

html - 如何递归爬取url子目录?

machine-learning - 通过搜索引擎进行网络挖掘

java - camel 通用生产者(通过 spring xml 配置路由)