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。

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