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。(後者は、csv には不要な html タグでコンテンツをラップします)。
  3. を追加phantom.exit()して、最後に座らないようにします。

でファイルを正常に取得できるのに、ステータスが「失敗」である理由がわかりませんwget。次のトラブルシューティング手順は、 を呼び出す前に次の 2 行を追加すること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));
};

Content-Length ヘッダーが 6,335,428 であるにもかかわらず、3878 バイトですぐに返されます。これは、チャンク エンコーディングまたは非常に大きなファイルのいずれかによる PhantomJS のバグ/制限である可能性があります。

更新: 短期的な解決策のもう 1 つのアイデアは、新しい spawn または execFile コマンドを使用して、PhantomJS スクリプト内から wget または curl を呼び出すことです: http://code.google.com/p/phantomjs/source/browse/ examples/child_process-examples.js

于 2013-05-28T01:03:42.360 に答える
0

この SO 投稿が役立つ場合があります。また、PhantomJS は NodeJS とは別の Web サーバーであるため、csv ノード ライブラリを使用することはできません。

于 2015-03-12T18:52:03.130 に答える