brianway/webporter

请问能够实现爬取过程中暂停功能么?

Arvinshu opened this issue · 2 comments

能不能记录爬取的最后一个用户到某个文件中,下次再运行的时候读取保留的信息,继续爬取。

由于爬取过程比较漫长,能够实现本次终止爬取后,下次能够继续爬取就很方便了。

本身就是文件缓存的,关闭后重新启动会从上次结束的位置继续爬。

源码见 ZhihuFolloweePageProcessor 类的 main 方法:

Spider.create(new ZhihuFolloweePageProcessor())
                .setScheduler(//new QueueScheduler()
                        new FixedFileCacheQueueScheduler(pipelinePath)
                                .setDuplicateRemover(new BloomFilterDuplicateRemover(crawlSize)))
                .addPipeline(new FilePipeline(pipelinePath))
                .addUrl(generateMemberUrl("hydro-ding"))
                .thread(20)
                .run();

其中 FixedFileCacheQueueScheduler 就是文件缓存之前下载过的链接。具体原理可以阅读源码,在此不赘述。

另, FixedFileCacheQueueScheduler 是由于 webmagic 0.5.3 有 bug (见 webmagic 的 issue #400 修复FileCacheQueueScheduler的NullPointerException问题 ),我按照作者回答临时修复的。后续 webporter 会升级 webmagic 到 0.6.0,这个类会去掉。

谢谢,我也刚刚看到这个方法。