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