3

如何访问简单的 csv 数据?

    var webpage = require('webpage');
    var csvPage = webpage.create();
    var csvUrl= "http://www.scoach.ch/arcmsdownload/023c5c5aa58e6e0ff963ddcdea5ac016/CONTENT.csv/derivatives_2013-05-24.csv";

    csvPage.open(csvUrl, function(status){
      console.log("csv: " + csvPage.content);
    });

这只会给我一个空的 html:这不是预期的结果 :-) 我尝试了几个回调,但没有任何帮助。

感谢您的帮助!

4

2 回答 2

2

首先,我要快速指出 PhantomJS 对于这项工作来说太过分了。使用 wget、curl、PHP file_get_contents 等。但是,我假设这是更复杂的 PhantomJS 脚本的一部分,您有充分的理由。

通过向您展示如何查看丢失的错误消息,我只能回答您的问题的一半:

var webpage = require('webpage');
var csvPage = webpage.create();
var csvUrl= "http://www.scoach.ch/arcmsdownload/023c5c5aa58e6e0ff963ddcdea5ac016/CONTENT.csv/derivatives_2013-05-24.csv";
csvPage.open(csvUrl, function(status){
  console.log("status="+status);
  console.log("csv: " + csvPage.plainText);
  phantom.exit();
});

我做了这些改变:

  1. 显示状态(它是“失败”)
  2. 改为使用plainText而不是content. (后者将您的内容包装在 html 标记中,而 csv 不需要这些标记)。
  3. 添加phantom.exit(),这样它就不会放在最后。

我不知道为什么状态是“失败”,当我可以用wget. 下一个故障排除步骤是在调用之前添加这两行csvPage.open

csvPage.onResourceRequested = function (request) {
    console.log('Request ' + JSON.stringify(request, undefined, 4));
};
csvPage.onResourceReceived = function (response) {
    console.log('Receive ' + JSON.stringify(response, undefined, 4));
};

即使我看到 6,335,428 的 Content-Length 标头,它也会立即返回 3878 字节。这可能是 PhantomJS 错误/限制,具有分块编码或非常大的文件。

更新:对于短期解决方案,另一个想法是使用新的 spawn 或 execFile 命令从 PhantomJS 脚本中调用 wget 或 curl: http ://code.google.com/p/phantomjs/source/browse/示例/child_process-examples.js

于 2013-05-28T01:03:42.360 回答
0

这篇 SO 帖子可能会有所帮助。另请注意,PhantomJS 是与 NodeJS 分开的 Web 服务器,因此不能选择使用 csv 节点库。

于 2015-03-12T18:52:03.130 回答