Scrapy-如何同时运行多个爬虫及定时问题

同时运行多个爬虫查到的主要有两种方法。第一种是在项目内创建command文件夹,添加改写后的crawl.py文件,并在settings.py进行相关配置实现的,该方法相当于创建了一个自定义的指令,启动多个爬虫时,在cmd命令行中执行新创建的指令即可。详细步骤见这里。第二种方法通过scrapy.crawler.CrawlerProcess实现,本人使用的就是这种方法。

官方文档中,scrapy.crawler.CrawlerProcess的介绍是“A class to run multiple scrapy crawlers in a process simultaneously.”,主要用到两个方法,CrawlerProcess.crawl()和CrawlerProcess.start(),crawl方法根据参数启动一个爬虫,start方法启动一个twisted reactor(scrapy是基于twisted事件驱动网络框架的),该方法会阻塞直到所有爬虫执行完毕。代码如下

process = CrawlerProcess(settings=get_project_settings())

for module_path, module_name, ispkg in pkgutil.iter_modules(spiders.__path__, spiders.__name__ + "."):
    print('module',module_name)

    spider_name = module_name.split('.')[-1]
    print(spider_name)
    process.crawl(spider_name)

process.start()

这里使用了python内置的pkgutil库,遍历spiders文件夹下所有爬虫并启动,最后执行start方法阻塞在这里。

另外在编写定时代码时,出现第一次运行没有问题,但是第二次会报twisted.internet.error.ReactorNotRestartable错误的情况,解决方法之一见这里,即在不同的进程中启动reactor。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章