2016-03-23 5 views
2

Я написал два паука в одном файле. Когда я побежал scrapy runspider two_spiders.py, был выполнен только первый Паук. Как я могу запустить оба из них, не разбивая файл на два файла.Scrapy положить двух пауков в один файл

two_spiders.py:

import scrapy 

class MySpider1(scrapy.Spider): 
    # first spider definition 
    ... 

class MySpider2(scrapy.Spider): 
    # second spider definition 
    ... 

произошла ошибка, как я следую @llya ответить

2016-03-23 19:48:52 [scrapy] INFO: Scrapy 1.0.5 started (bot: scrapybot) 
2016-03-23 19:48:52 [scrapy] INFO: Optional features available: ssl, http11 
2016-03-23 19:48:52 [scrapy] INFO: Overridden settings: {} 
2016-03-23 19:48:54 [scrapy] INFO: Scrapy 1.0.5 started (bot: scrapybot) 
2016-03-23 19:48:54 [scrapy] INFO: Scrapy 1.0.5 started (bot: scrapybot) 
2016-03-23 19:48:54 [scrapy] INFO: Optional features available: ssl, http11 
2016-03-23 19:48:54 [scrapy] INFO: Optional features available: ssl, http11 
... 
scrapy runspider two_spiders.py 

Traceback (most recent call last): 
    File "/opt/pyenv.agutong-scrapy/bin/scrapy", line 11, in <module> 
    sys.exit(execute()) 
    File "/opt/pyenv.agutong-scrapy/lib/python2.7/site-packages/scrapy/cmdline.py", line 143, in execute 
    _run_print_help(parser, _run_command, cmd, args, opts) 
    File "/opt/pyenv.agutong-scrapy/lib/python2.7/site-packages/scrapy/cmdline.py", line 89, in _run_print_help 
    func(*a, **kw) 
    File "/opt/pyenv.agutong-scrapy/lib/python2.7/site-packages/scrapy/cmdline.py", line 150, in _run_command 
    cmd.run(args, opts) 
    File "/opt/pyenv.agutong-scrapy/lib/python2.7/site-packages/scrapy/commands/runspider.py", line 89, in run 
    self.crawler_process.start() 
    File "/opt/pyenv.agutong-scrapy/lib/python2.7/site-packages/scrapy/crawler.py", line 251, in start 
    reactor.run(installSignalHandlers=False) # blocking call 
    File "/opt/pyenv.agutong-scrapy/lib/python2.7/site-packages/twisted/internet/base.py", line 1193, in run 
    self.startRunning(installSignalHandlers=installSignalHandlers) 
    File "/opt/pyenv.agutong-scrapy/lib/python2.7/site-packages/twisted/internet/base.py", line 1173, in startRunning 
    ReactorBase.startRunning(self) 
    File "/opt/pyenv.agutong-scrapy/lib/python2.7/site-packages/twisted/internet/base.py", line 684, in startRunning 
    raise error.ReactorNotRestartable() 
twisted.internet.error.ReactorNotRestartable 
+0

Почему вы хотите их в одном файле? –

ответ

1

Давайте читать documentation:

Запуск нескольких пауков в том же процессе

По умолчанию Scrapy запускает одиночный паук в процессе при запуске scrapy crawl. Тем не менее, Scrapy поддерживает запуск нескольких пауков на один процесс с использованием internal API.

Вот пример, который запускает несколько пауков одновременно:

import scrapy 
from scrapy.crawler import CrawlerProcess 

class MySpider1(scrapy.Spider): 
    # Your first spider definition 
    ... 

class MySpider2(scrapy.Spider): 
    # Your second spider definition 
    ... 

process = CrawlerProcess() 
process.crawl(MySpider1) 
process.crawl(MySpider2) 
process.start() # the script will block here until all crawling jobs are finished 

(есть несколько примеров в документации)

Из Вашего вопроса не ясно, как бы вы положили два пауков в один файл. Недостаточно объединить содержимое двух файлов с одиночными пауками.

Попробуйте сделать то, что написано в документации. Или, по крайней мере, покажите нам свой код. Без этого мы не можем вам помочь.

+0

См. Мое обновление. И я хочу запустить его, используя «scrapy runpider». – gzc

+0

Он будет бросать 'twisted.internet.error.ReactorNotRestartable', даже если я сканирую только одного паука. – gzc

+0

Почему для вас важно использовать «scrapy runpider»? И почему вы не хотите запускать пару пауков, как написано в документации? – Ilya

Смежные вопросы