celery 调用scrapy

  我的环境: celery 3.1.25 python 3.6.9 window10

celery tasks 代码如下,其中 QuotesSpider 是我的scrapy项目爬虫类名称

from celery_app import app
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
from tutorial.spiders.quotes import QuotesSpider

def crawl_run():
    scope = 'all'
    process = CrawlerProcess(settings=get_project_settings())
    process.crawl(QuotesSpider, scope)
    process.start()
    process.join()

@app.task(queue='default')
def execute_task():
    return crawl_run()


后面发现这样写重复做定时任务的时候会报错,报reactor不能重启的问题,改成下面这样就解决了,这个类要放在和项目scrapy.cfg同级目录下

from crawler.tutorial.crawler.tutorial.spiders.quotes import QuotesSpider
from scrapy.utils.project import get_project_settings
import scrapy.crawler as crawler
from crochet import setup
setup()
import os

class Scraper():
    def crawl_run(self):
        spider = QuotesSpider()
        settings = get_project_settings()
        runner = crawler.CrawlerRunner(settings)
        runner.crawl(spider, 'all')
        runner.join()


if __name__ == '__main__':
    scraper = Scraper()
    scraper.crawl_run()
原文地址:https://www.cnblogs.com/WalkOnMars/p/11558560.html