我正在使用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