用phantomjs下载csv(或其他非html数据)

时间:2013-05-27 14:58:54

标签: phantomjs

如何访问简单的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:这不是预期的结果:-)我已经尝试了几次回调,但没有任何帮助我。

感谢您的帮助!

2 个答案:

答案 0 :(得分: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(),这样就不会在最后了。
  4. 我不知道为什么状态为“失败”,当我可以使用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));
    };
    

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

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

答案 1 :(得分:0)

This SO post might help。 另请注意,PhantomJS是NodeJS的独立Web服务器,因此不能使用csv节点库。