TurboWay/spiderman

如何先启动所有爬虫,然后再向单个爬虫投递网址

xkungfu opened this issue · 2 comments

目前的任务逻辑是,先make_job, 然后生成爬虫启动命令scrapy crawl xxx,启动爬虫并开始采集。

这就造成每次执行采集,就要先等待爬虫启动。

这样的启动过程需要耗时5秒左右,无法适应即时采集的需求。

我在spiderman的外层套了一层sanic的restful api,接收到API请求后,执行job=xxx_job, job.make_job, job.crawl。这个过程就是启动爬虫和开始采集的过程。这个启动很要命,时间太长了。

我这几天研究了好几天,无奈才疏学浅,没有实现先启动后接收采集任务。

请问可否提供一个改造的思路,所有爬虫一次性启动,等待接收采集任务。接到任务后,立即开始采集并返回结果。

谢谢!

实时采集的话,可以考虑爬虫一直开着不关闭,每采集一条数据就入库,或者直接写到 kafka。这样一来,你的 api 只要执行 job.make_job 就可以了。

custom_settings = {
        ...
        'EXTENSIONS': {}   # 爬虫保持不关闭,只需在 spider 中关闭扩展
    } 

谢谢,我试一下!