我最近尝试使用节点js从其他网站(如yahoo Finance)(例如“ http://real-chart.finance.yahoo.com/table.csv?s=AAPL&a=11&b=12&c=1999&d=01&e=4&f=2016&g=d&ignore=.csv”这样的网址之一)收集一些数据,如果我将此网址放入浏览器,则会提示弹出窗口。
而在我的节点代码中找不到该网址。

var fs = require('fs');
var http = require('http');
var url = require('url');
var csv = require( "fast-csv" );

// var FILENAME = "file/table.csv";
var FILENAME = "http://real-chart.finance.yahoo.com/table.csv?s=AAPL&a=11&b=12&c=1999&d=01&e=4&f=2016&g=d&ignore=.csv";

function fast_csv_read(filename)
{
    csv.fromPath(filename)
    .on("data", function(data){
        console.log("current data: ");
        console.log(data);
    })
    .on("end", function(){
        console.log("done reading");
    });
}

fast_csv_read(FILENAME);


如果我使用浏览器下载此文件并将其保存在“ file / table.csv”中,则可以正常工作。
不知道出了什么问题...

最佳答案

.fromPath仅接受文件路径,不接受URL。

您必须首先自己从URL检索文档,然后以下列方式之一将其内容提供给fast-csv模块:


将文档内容传递到.fromString()
将可读流传递到.fromStream()
将可读流通过管道传输到.parse()


request module提供了一种从URL返回可读流的便捷方法。用npm --save install request安装。

例如,将可读流传递给.fromStream()看起来像这样:

#!/usr/bin/env node

var csv = require( "fast-csv" );

// Require the 'request' module.
// Install it with `npm install --save request`.
var request = require('request');

var URL = "http://real-chart.finance.yahoo.com/table.csv?s=AAPL&a=11&b=12&c=1999&d=01&e=4&f=2016&g=d&ignore=.csv";

function fast_csv_read_url(url)
{
    // Let request return the document pointed to by the URL
    // as a readable stream, and pass it to csv.fromStream()
    csv.fromStream(request(url))
      .on("data", function(data){
        console.log("current data: ");
        console.log(data);
      })
      .on("end", function(){
        console.log("done reading");
      });
}

fast_csv_read_url(URL);

关于node.js - 如何使用 Node js处理在线csv文件,例如“http://…/data.csv?para1 =…&para2 =…”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35446897/

10-11 21:56
查看更多