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

使用phantomjs下载csv(或其他非html数据),phantomjs,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(st

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


谢谢你的帮助

首先,我要很快指出,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();
});
我做了以下改变:

  • 显示状态(为“失败”)
  • 更改为使用
    纯文本
    而不是
    内容
    。(后者将您的内容包装在html标记中,您不希望将其用于csv)
  • 添加
    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));
    };
    
    它立即返回,有3878字节,尽管我看到的内容长度头是6335428。这可能是PhantomJS的缺陷/限制,可能是分块编码,也可能是非常大的文件

    更新:另一个短期解决方案是使用新的spawn或execFile命令从PhantomJS脚本内部调用wget或curl:


    还要注意,PhantomJS是与NodeJS分开的web服务器,因此使用csv节点库不是一个选项。

    谢谢!我已经根据这个问题写了一份bug报告。你有没有找到这个问题的答案?