在scrapy中从脚本运行多个蜘蛛

时间:2016-03-07 09:34:50

标签: scrapy scrapy-spider

我正在做scrapy项目我希望一次运行多个蜘蛛 这是脚本中运行spiders的代码。我收到错误..怎么办

 # crawl responsibly
 settings.set("USER_AGENT", "Kiran Koduru (+http://kirankoduru.github.io)")
 crawler = Crawler(settings)
 crawler_obj = spider()
 RUNNING_CRAWLERS.append(crawler_obj)

# stop reactor when spider closes
crawler.signals.connect(spider_closing, signal=signals.spider_closed)
crawler.configure()
crawler.crawl(crawler_obj)
crawler.start()

log.start(日志级别= log.DEBUG)    对于TO_CRAWL中的蜘蛛:       settings =设置()

{{1}}

阻止进程,因此始终保留为最后一个语句

reactor.run()

2 个答案:

答案 0 :(得分:2)

您需要类似下面的代码。您可以从Scrapy docs轻松找到它:)

  

您可以用来运行蜘蛛的第一个实用程序是   scrapy.crawler.CrawlerProcess。这个类将启动一个Twisted反应器   为您,配置日志记录和设置关闭处理程序。这个   class是所有Scrapy命令使用的类。

# -*- coding: utf-8 -*-
import sys
import logging
import traceback
from scrapy.crawler import CrawlerProcess
from scrapy.conf import settings
from scrapy.utils.project import get_project_settings
from spiders.DmozSpider import DmozSpider
from spiders.CraigslistSpider import CraigslistSpider

SPIDER_LIST = [
    DmozSpider, CraigslistSpider
]

if __name__ == "__main__":
    try:
        ## set up the crawler and start to crawl one spider at a time
        process = CrawlerProcess(get_project_settings())
        for spider in SPIDER_LIST:
            process.crawl(spider)
        process.start()
    except Exception, e:
        exc_type, exc_obj, exc_tb = sys.exc_info()
        logging.info('Error on line {}'.format(sys.exc_info()[-1].tb_lineno))
        logging.info("Exception: %s" % str(traceback.format_exc()))

参考文献: http://doc.scrapy.org/en/latest/topics/practices.html

答案 1 :(得分:1)

很抱歉回答问题本身,只是引起你的注意scrapydscrapinghub(至少是为了快速测试)。 reactor.run()(当你创建它时)将在单个CPU上运行任意数量的Scrapy实例。你想要这种副作用吗?即使您查看scrapyd的代码,它们也不会使用单个线程运行多个实例,但它们会fork/spawn subprocesses