使用 CasperJS 将多个页面的结果保存到一个 JSON 文件中

Save results from mutiple pages into one JSON file using CasperJS

我正在尝试使用 CasperJS 从网站上抓取一些页面并创建一个包含结果的 JSON 文件。但是,我在创建有效的 JSON 文件时遇到了问题。

我的代码的相关示例,每个页面 运行:

casper.then(function(){

var fs = require('fs');

fs.write('results.json', JSON.stringify(result), 'a');
this.echo(JSON.stringify(result, undefined, 4));

casper.then(getNextPage);

});  

这将创建一个 JSON 文件,每个页面以“[”开头并以“]”结尾,如下所示:

[{"Name":"Name1","Price":"10"},(...),{"Name":"Name45","Price":"20"}][{"Name":"Name46","Price":"4.20"}, etc...

我在浏览器中阅读时出现以下错误:

"Error: Parse error on line 1:
...key-steam-arma-3/"}][{"Name":"HearthSton
-----------------------^
Expecting 'EOF', '}', ',', ']'

阅读 的答案后,我意识到我不能将对象附加到现有对象,因为在 JSON 中,必须有一个顶级项目。但是,即使我知道错误的来源,我也找不到解决方案(post 中的解决方案对我不起作用,因为我的 JSON 输出不同)。

在过去的几个小时里,我一直在摸不着头脑,试图想出一些办法,但没有成功。我试过将流的编码更改为 UTF-8,但这也不起作用。如果这是一个愚蠢的问题,我很抱歉,因为我是 CasperJS 和 javascript 的新手。如果有人能指出我正确的方向,我将不胜感激!

您可以创建一个全局变量并将每个结果附加到它。然后保存。

var fs = require('fs'); // better to require it once
var results = [];

// ... some code

casper.then(function(){

  results.push(result);

  fs.write('results.json', JSON.stringify(results));
  this.echo(JSON.stringify(results, undefined, 4));

  casper.then(getNextPage);

});