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

时间:2017-08-07 19:55:00

标签: javascript json web-scraping 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', '}', ',', ']'

this similar question阅读答案后,我意识到我无法将对象附加到现有对象,因为在JSON中,必须有一个顶级项目。但是,即使我理解错误的来源,我也无法找到解决方案(由于我的JSON输出不同,本文中的解决方案对我不起作用)。

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

1 个答案:

答案 0 :(得分:1)

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

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);

});