2014-04-10 3 views
1

Я начинаю в Python & Scrapy. Я только что создал проект Scrapy с несколькими пауками, при запуске «scrapy crawl ..» он запускает только первого паука.Как запустить несколько пауков в том же процессе в Scrapy

Как я могу запускать всех пауков в одном и том же процессе?

Заранее спасибо.

+0

Вам нужно запустить несколько экземпляров одного и того же паука или группы разных пауков? – Talvalin

+0

У меня много пауков в папке моего проекта «пауки». & Я хочу запустить все из них одним выстрелом, вместо того, чтобы запускать «scrapy crawl» для каждого из них. Также я хотел бы знать, есть ли способ автоматизировать эту задачу, например, запускать сканирование каждый час. Спасибо – elhoucine

ответ

4

У вас будет имя для каждого паука в файле, который говорит name="youspidername". и когда вы вызываете его с помощью scrapy crawl yourspidername, он будет сканировать только этот паук. вам придется снова дать команду запустить другого паука, используя scrapy crawl youotherspidername.

Другой способ просто упомянуть все пауки в одной и той же команды, как scrapy crawl yourspidername,yourotherspidername,etc.. (этот метод не поддерживается для новых версий Scrapy)

+0

Привет @Reddy спасибо за ответ. Я пробовал свой первый метод, и он работает, но на самом деле мне нужно запустить всех пауков с помощью одной команды. Возможно, мне нужно закодировать новый файл.py, который запускает всех пауков или что-то в этом роде, но я точно не знаю, как это сделать! Вы правы, другой метод не работает. – elhoucine

+0

его простой. Просто добавьте новые классы в файл items.py, а затем импортируйте их, чтобы создать (определить) новый парсер в вашем паук. – Abhishek

1

Каждый, даже документы, предлагают использовать внутренний API для автора «сценарий запуска», который контролирует запуск и остановку нескольких пауков. Тем не менее, это связано с большим количеством предостережений, если вы не получите его абсолютно правильно (feedexports не работает, скрученный реактор либо не останавливается, либо останавливается слишком рано и т. Д.).

На мой взгляд, у нас есть известная работающая и поддерживаемая команда scrapy crawl x, и поэтому гораздо более простой способ справиться с этим - использовать GNU Parallel to parellize.

После установки, запустить (из оболочки) один SCRAPY паук на ядро ​​и если вы хотите, чтобы запустить все те, в вашем проекте:

scrapy list | parallel --line-buffer scrapy crawl 

Если у вас есть только одно ядро, вы можете играть вокруг с аргументом --jobs для GNU Parallel. Например, следующее будет выполняться по 2 заданиям на лунку на ядро:

scrapy list | parallel --jobs 200% --line-buffer scrapy crawl 
Смежные вопросы