Closed xkungfu closed 3 years ago
目前的任务逻辑是,先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 中关闭扩展 }
谢谢,我试一下!
目前的任务逻辑是,先make_job, 然后生成爬虫启动命令scrapy crawl xxx,启动爬虫并开始采集。
这就造成每次执行采集,就要先等待爬虫启动。
这样的启动过程需要耗时5秒左右,无法适应即时采集的需求。
我在spiderman的外层套了一层sanic的restful api,接收到API请求后,执行job=xxx_job, job.make_job, job.crawl。这个过程就是启动爬虫和开始采集的过程。这个启动很要命,时间太长了。
我这几天研究了好几天,无奈才疏学浅,没有实现先启动后接收采集任务。
请问可否提供一个改造的思路,所有爬虫一次性启动,等待接收采集任务。接到任务后,立即开始采集并返回结果。
谢谢!