Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java crawler4j异步将结果保存到文件_Java_Asynchronous_Web Scraping_Crawler4j - Fatal编程技术网

Java crawler4j异步将结果保存到文件

Java crawler4j异步将结果保存到文件,java,asynchronous,web-scraping,crawler4j,Java,Asynchronous,Web Scraping,Crawler4j,我正在评估crawler4j每天大约100万次的爬行 我的场景是这样的:我获取URL并解析它的描述、关键字和标题,现在我想将每个URL及其单词保存到一个文件中 我已经看到了这是怎么可能的。但是,由于我有许多爬网要执行,所以我希望不同的线程在文件系统上执行保存文件操作(以便不阻止获取程序线程)。这可能与crawler4j有关吗?如果是,怎么做 谢谢考虑使用一个(或类似的)方法,将要写入的数据放在其中,然后由一个或多个工作线程处理(这种方法与crawler4j无关)。搜索“生产者-消费者”以获得一些

我正在评估crawler4j每天大约100万次的爬行 我的场景是这样的:我获取URL并解析它的描述、关键字和标题,现在我想将每个URL及其单词保存到一个文件中

我已经看到了这是怎么可能的。但是,由于我有许多爬网要执行,所以我希望不同的线程在文件系统上执行保存文件操作(以便不阻止获取程序线程)。这可能与crawler4j有关吗?如果是,怎么做

谢谢

考虑使用一个(或类似的)方法,将要写入的数据放在其中,然后由一个或多个工作线程处理(这种方法与crawler4j无关)。搜索“生产者-消费者”以获得一些一般想法

关于如何将
队列
传递给爬虫程序实例的后续问题,这应该可以做到(这只是查看代码,我自己没有使用爬虫4j):

final BlockingQueue=…
//使用工厂,而不是提供爬虫类型来传递队列
controller.start(新WebCrawlerFactory(){
@凌驾
公共MyCrawler newInstance()引发异常{
返回新的MyCrawler(队列);
}
},爬虫数目);

考虑使用
队列
,将要写入的数据放入队列中,然后由一个/多个工作线程
处理这些数据(这种方法不特定于
crawler4j
)。搜索“生产者-消费者”以获得一些一般性的想法。@qqilihq您如何与爬虫共享队列?我自己没有实例化爬虫程序,也不确定我是否理解这个问题。代码示例将有助于…您使用以下命令创建爬虫程序:controller.start(MyCrawler.class,numberofcrawler)这意味着MyCrawler正在被控制器实例化,如果我这样做,我如何共享队列?我可能会使它成为静态的(因此是全局的),但这通常是一个糟糕的想法。我完全错过了那个工厂。谢谢
final BlockingQueue<Data> queue = …

// use a factory, instead of supplying the crawler type to pass the queue
controller.start(new WebCrawlerFactory<MyCrawler>() {
    @Override
    public MyCrawler newInstance() throws Exception {
        return new MyCrawler(queue);
    }
}, numberOfCrawlers);