我正在评估crawler4j每天约1M次抓取 我的场景是这样的:我抓取URL并解析其描述,关键字和标题,现在我想要保存每个URL和将它的文字合并成单个文件crawler4j将结果异步保存到文件
我已经看到save crawled data to files的可能性。但是,由于我有很多要执行的抓取,我希望不同的线程在文件系统上执行保存文件操作(以便不阻塞抓取器线程)。这可能与crawler4j有关吗?如果是这样,怎么样?
感谢
我正在评估crawler4j每天约1M次抓取 我的场景是这样的:我抓取URL并解析其描述,关键字和标题,现在我想要保存每个URL和将它的文字合并成单个文件crawler4j将结果异步保存到文件
我已经看到save crawled data to files的可能性。但是,由于我有很多要执行的抓取,我希望不同的线程在文件系统上执行保存文件操作(以便不阻塞抓取器线程)。这可能与crawler4j有关吗?如果是这样,怎么样?
感谢
考虑使用你把要写入的数据,然后由一个/多个工作线程处理的Queue
(BlockingQueue
或类似)(这种做法没什么crawler4j专用)。寻找“生产者消费者”来获得一些一般的想法。
关于如何通过Queue
于履带装置的情况下,这应该做的伎俩您的后续问题(这只是从看source代码,不是我自己的使用crawler4j):
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);
我完全错过了该工厂。谢谢! – Gideon
考虑使用'Queue'来放置要写入的数据,然后通过一个或多个Worker'Thread'处理(这种方法没有'crawler4j'特定的)。寻找“生产者消费者”来获得一些一般的想法。 – qqilihq
@qqilihq你如何与爬虫分享队列?我不会自己实例化爬虫程序 – Gideon
不知道我是否理解这个问题。代码示例将有助于... – qqilihq