Casperjs 需要本地 JSON 文件
Casperjs requiring local JSON file
我正在尝试获取本地 JSON 文件(例如配置文件)并传递那些 JSON 对象以进行评估。对于每个配置文件,评估函数将 return 不同的结果,具体取决于来自配置 JSON.
的给定 CSS 选择器
例如:
文件夹结构是这样的:
rootdir
casperExample.js
config/
|_example.json
example.json
{
"title": "$('div.pointslocal-details-section h1').text();",
"date": "$('div.pointslocal-details-time p').text();"
}
casperExample.js
var casper = require('casper').create();
var require = patchRequire(require);
var json = require('./config/example.json');
casper.start('https://website/to/be/scraped');
casper.then(function(){
this.echo(json);
pageData = this.evaluate(function(json){
var results = {};
results['title'] = json.title;
results['date'] = json.date;
return results;
}, json);
this.echo(pageData);
});
casper.run(function(){
this.exit();
});
这是我尝试 运行 时得到的结果:casperjs casperExample.js
CasperError: Can't find module ./config/example.json
C:/Users/msarc/coding/casper/rootdir/phantomjs:/code/bootstrap.js:307 in patchedRequire
如果我使用 var json = require('./config/example');
(没有 .json),我会得到
SyntaxError: Expected token '}'
C:/Users/msarc/coding/casper/rootdir/phantomjs:/platform/example.js:32 in loadModule
C:/Users/msarc/coding/casper/rootdir/phantomjs:/platform/bootstrap.js:282 in _compile
C:/Users/msarc/coding/casper/rootdir/phantomjs:/platform/bootstrap.js:126 in .js
C:/Users/msarc/coding/casper/rootdir/phantomjs:/platform/bootstrap.js:278 in _load
C:/Users/msarc/coding/casper/rootdir/phantomjs:/platform/bootstrap.js:311 in require
C:/Users/msarc/coding/casper/rootdir/phantomjs:/platform/bootstrap.js:263 in require
C:/Users/msarc/coding/casper/rootdir/phantomjs:/code/bootstrap.js:302 in patchedRequire
我想最终制作多个配置文件,每个配置文件都有针对不同网站的不同选择器。 casperjs 版本:1.1.4 phantomjs 版本:2.1.1
您正在 require
ing json 文件,就好像它是 javascript 模块一样,当然不是,因此出现错误。相反,您需要读取文件并处理它是 JSON 结构:
var fs = require('fs');
var fileContents = fs.read('config/_example.json');
var json = JSON.parse(fileContents);
然后按计划继续工作。
我正在尝试获取本地 JSON 文件(例如配置文件)并传递那些 JSON 对象以进行评估。对于每个配置文件,评估函数将 return 不同的结果,具体取决于来自配置 JSON.
的给定 CSS 选择器例如: 文件夹结构是这样的:
rootdir
casperExample.js
config/
|_example.json
example.json
{
"title": "$('div.pointslocal-details-section h1').text();",
"date": "$('div.pointslocal-details-time p').text();"
}
casperExample.js
var casper = require('casper').create();
var require = patchRequire(require);
var json = require('./config/example.json');
casper.start('https://website/to/be/scraped');
casper.then(function(){
this.echo(json);
pageData = this.evaluate(function(json){
var results = {};
results['title'] = json.title;
results['date'] = json.date;
return results;
}, json);
this.echo(pageData);
});
casper.run(function(){
this.exit();
});
这是我尝试 运行 时得到的结果:casperjs casperExample.js
CasperError: Can't find module ./config/example.json
C:/Users/msarc/coding/casper/rootdir/phantomjs:/code/bootstrap.js:307 in patchedRequire
如果我使用 var json = require('./config/example');
(没有 .json),我会得到
SyntaxError: Expected token '}'
C:/Users/msarc/coding/casper/rootdir/phantomjs:/platform/example.js:32 in loadModule
C:/Users/msarc/coding/casper/rootdir/phantomjs:/platform/bootstrap.js:282 in _compile
C:/Users/msarc/coding/casper/rootdir/phantomjs:/platform/bootstrap.js:126 in .js
C:/Users/msarc/coding/casper/rootdir/phantomjs:/platform/bootstrap.js:278 in _load
C:/Users/msarc/coding/casper/rootdir/phantomjs:/platform/bootstrap.js:311 in require
C:/Users/msarc/coding/casper/rootdir/phantomjs:/platform/bootstrap.js:263 in require
C:/Users/msarc/coding/casper/rootdir/phantomjs:/code/bootstrap.js:302 in patchedRequire
我想最终制作多个配置文件,每个配置文件都有针对不同网站的不同选择器。 casperjs 版本:1.1.4 phantomjs 版本:2.1.1
您正在 require
ing json 文件,就好像它是 javascript 模块一样,当然不是,因此出现错误。相反,您需要读取文件并处理它是 JSON 结构:
var fs = require('fs');
var fileContents = fs.read('config/_example.json');
var json = JSON.parse(fileContents);
然后按计划继续工作。