2015-04-28 42 views
0

我正在使用Scrapy来抓取多个网站,并且需要输出为JSON。我设置了命令:是否可以自定义Scrapy json输出?

scrapy crawl MySpider -o "path/to/output.json" -t json 

这样的作品,不过,现在我需要统计添加到输出 - 请求,错误类型的错误列表(404等)。另外,我需要重写输出文件,而不是附加到。我找不到任何指示如何做到这一点。

回答

0

AFAIK Item Exporters只处理项目,因此将JsonItemExporter导出到同一文件是不合逻辑的 - 数据结构不同。

如果您想要覆盖数据 - 在导出之前删除文件。

0

项目输出和蜘蛛的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 
+0

感谢。有没有办法从Python做到这一点?我需要在一个脚本中包含所有内容,并且如果可能的话,不要生成临时文件,因此输出应该以某种方式重定向到Python,然后我想手动生成输出json。 – Ognjen

+0

我很困惑,如果我应该使用这个http://stackoverflow.com/questions/13437402/how-to-run-scrapy-from-within-a-python-script或只是自定义项目管道? – Ognjen

+0

取决于你想要做什么。如果您想从Python脚本完全运行爬网,您可以在该链接中找到答案。如果您想修改项目的输出,请查看[feed exporters](http://doc.scrapy.org/en/latest/topics/feed-exports.html),您也可以在SO上找到一些示例。 – bosnjak