2014-04-10 62 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謝謝你的回覆。 我試過你的第一種方法,它的工作,但實際上我需要用一個命令運行所有的蜘蛛。 也許我需要編寫一個新的file.py來運行每個蜘蛛或類似的東西,但我不知道如何! 你是對的另一種方法不起作用。 – elhoucine

+0

其簡單。只需將新類添加到items.py文件中,然後導入它們以在蜘蛛中創建(定義)新的分析器。 – Abhishek

1

每個人,甚至是文檔,建議使用內部API以筆者一個「運行腳本」,用於控制多個蜘蛛的啓動和停止。然而,這有很多警告,除非你完全正確(feedexports不工作,扭曲的反應堆要麼不停止或停止太快等)。

在我看來,我們有一個已知的工作和支持scrapy crawl x命令,因此處理這個問題的一個更簡單的方法是使用GNU Parallel來parellize。

安裝後,要(從shell)運行的每個核心一個scrapy蜘蛛並假設你想在你的項目中運行的所有的人:

scrapy list | parallel --line-buffer scrapy crawl 

如果你只有一個核心,你可以玩與GNU Parallel的--jobs爭執。例如,以下將運行每個核心2個scrapy作業:

scrapy list | parallel --jobs 200% --line-buffer scrapy crawl