Java Niocchi crawler-如何在爬网过程中添加url进行爬网(爬网整个网站)

Java Niocchi crawler-如何在爬网过程中添加url进行爬网(爬网整个网站),java,web-crawler,Java,Web Crawler,有人有过Niocchi图书馆的经验吗?我开始用域url爬网。在Worker方法processResource()中,我解析我获得的资源,提取此页面中的所有内部链接,然后需要将它们添加到爬网。但是我不知道怎么做。我应该将其添加到UrlPool、ResourcePool或其他地方吗 谢谢 您可以将它们添加到现有的URL池中。现有的URLPool实现是不可扩展的,因此您必须创建自己的可扩展URLPool类。我把我的班级叫做ExpandableURLPool 处理完成后,框架将调用URLPool.set

有人有过Niocchi图书馆的经验吗?我开始用域url爬网。在Worker方法processResource()中,我解析我获得的资源,提取此页面中的所有内部链接,然后需要将它们添加到爬网。但是我不知道怎么做。我应该将其添加到UrlPool、ResourcePool或其他地方吗


谢谢

您可以将它们添加到现有的URL池中。现有的URLPool实现是不可扩展的,因此您必须创建自己的可扩展URLPool类。我把我的班级叫做ExpandableURLPool

处理完成后,框架将调用URLPool.setProcessed方法,您可以在那里向url列表添加其他url。我将举一个例子,但首先,URLPool文档说明:

爬虫程序调用setProcessed(Query),在对查询进行爬网并处理其资源时通知URLPool。URLPool通常使用此选项来检查爬网状态,并在失败时记录错误,或者在成功时获取更多要爬网的URL。getNextQuery()返回null但hasNextQuery()返回true的一个典型示例是,URL池正在等待从中提取更多要爬网的URL的某些已处理资源返回。检查urlpools包以获取实现示例

这意味着ExapndableURLPool实现中的一个棘手部分是,如果正在处理一个可能导致向池中添加新URL的未完成查询,则hasNextQuery方法应返回true。类似地,如果存在尚未完成的查询,并且可能导致新URL添加到池中,则getNextQuery必须返回null。[我不喜欢niocchi在这方面的组合方式]

以下是我的ExpandableURLPool的初步版本:

class ExpandableURLPool implements URLPool {
List<String> urlList = new ArrayList<String>();
int cursor = 0;

int outstandingQueryies = 0;

public ExpandableURLPool(Collection<String> seedURLS) {
    urlList.addAll(seedURLS);
}

@Override
public boolean hasNextQuery() {
   return  cursor < urlList.size() || outstandingQueryies > 0;

}

@Override
public Query getNextQuery() throws URLPoolException {
    try {
        if (cursor >= urlList.size()) {
            return null;
        } else {
            outstandingQueryies++;
            return new Query( urlList.get(cursor++) ) ;
        }
    } catch (MalformedURLException e) {
        throw new URLPoolException( "invalid url", e ) ;
    }    
}

@Override
public void setProcessed(Query query) {
    outstandingQueryies--;


}

public void addURL(String url) {
    urlList.add(url);
}

}

您可以将它们添加到现有的URL池中。现有的URLPool实现是不可扩展的,因此您必须创建自己的可扩展URLPool类。我把我的班级叫做ExpandableURLPool

处理完成后,框架将调用URLPool.setProcessed方法,您可以在那里向url列表添加其他url。我将举一个例子,但首先,URLPool文档说明:

爬虫程序调用setProcessed(Query),在对查询进行爬网并处理其资源时通知URLPool。URLPool通常使用此选项来检查爬网状态,并在失败时记录错误,或者在成功时获取更多要爬网的URL。getNextQuery()返回null但hasNextQuery()返回true的一个典型示例是,URL池正在等待从中提取更多要爬网的URL的某些已处理资源返回。检查urlpools包以获取实现示例

这意味着ExapndableURLPool实现中的一个棘手部分是,如果正在处理一个可能导致向池中添加新URL的未完成查询,则hasNextQuery方法应返回true。类似地,如果存在尚未完成的查询,并且可能导致新URL添加到池中,则getNextQuery必须返回null。[我不喜欢niocchi在这方面的组合方式]

以下是我的ExpandableURLPool的初步版本:

class ExpandableURLPool implements URLPool {
List<String> urlList = new ArrayList<String>();
int cursor = 0;

int outstandingQueryies = 0;

public ExpandableURLPool(Collection<String> seedURLS) {
    urlList.addAll(seedURLS);
}

@Override
public boolean hasNextQuery() {
   return  cursor < urlList.size() || outstandingQueryies > 0;

}

@Override
public Query getNextQuery() throws URLPoolException {
    try {
        if (cursor >= urlList.size()) {
            return null;
        } else {
            outstandingQueryies++;
            return new Query( urlList.get(cursor++) ) ;
        }
    } catch (MalformedURLException e) {
        throw new URLPoolException( "invalid url", e ) ;
    }    
}

@Override
public void setProcessed(Query query) {
    outstandingQueryies--;


}

public void addURL(String url) {
    urlList.add(url);
}

}

谢谢!效果很好。这个答案太完美了!谢谢!效果很好。这个答案太完美了!