我正在使用Scrapy來抓取多個網站,並且需要輸出爲JSON。我設置了命令:是否可以自定義Scrapy json輸出?
scrapy crawl MySpider -o "path/to/output.json" -t json
這樣的作品,不過,現在我需要統計添加到輸出 - 請求,錯誤類型的錯誤列表(404等)。另外,我需要重寫輸出文件,而不是附加到。我找不到任何指示如何做到這一點。
我正在使用Scrapy來抓取多個網站,並且需要輸出爲JSON。我設置了命令:是否可以自定義Scrapy json輸出?
scrapy crawl MySpider -o "path/to/output.json" -t json
這樣的作品,不過,現在我需要統計添加到輸出 - 請求,錯誤類型的錯誤列表(404等)。另外,我需要重寫輸出文件,而不是附加到。我找不到任何指示如何做到這一點。
AFAIK Item Exporters只處理項目,因此將JsonItemExporter導出到同一文件是不合邏輯的 - 數據結構不同。
如果您想要覆蓋數據 - 在導出之前刪除文件。
項目輸出和蜘蛛的stdout/stderr是兩個單獨的概念,你最好不要混合這些。
保留項目一部分是,讓一個單獨的文件中的項目,並通過將其重定向到一個日誌文件,這樣收集其他有用的蜘蛛輸出:
scrapy crawl MySpider -o "path/to/output.json" > out.log 2>&1
現在你將擁有所有的日誌中out.log
文件,你可以在那裏找到最終的統計數據。請注意,如果使用正確的文件擴展名,則不需要明確指定-t
的格式。 此外,目前還沒有辦法改變追加到輸出,而不是覆蓋的行爲,所以你可以之前刪除的文件,如:
rm output.json ; scrapy crawl MySpider -o "path/to/output.json" > out.log 2>&1
感謝。有沒有辦法從Python做到這一點?我需要在一個腳本中包含所有內容,並且如果可能的話,不要生成臨時文件,因此輸出應該以某種方式重定向到Python,然後我想手動生成輸出json。 – Ognjen
我很困惑,如果我應該使用這個http://stackoverflow.com/questions/13437402/how-to-run-scrapy-from-within-a-python-script或只是自定義項目管道? – Ognjen
取決於你想要做什麼。如果您想從Python腳本完全運行爬網,您可以在該鏈接中找到答案。如果您想修改項目的輸出,請查看[feed exporters](http://doc.scrapy.org/en/latest/topics/feed-exports.html),您也可以在SO上找到一些示例。 – bosnjak