【问题标题】:Download Image with Node-Request with URL scan from CSV从 CSV 下载带有节点请求和 URL 扫描的图像
【发布时间】:2016-07-24 11:24:50
【问题描述】:

请原谅我,因为代码很乱。我还在学习。 我需要从 CSV 文件下载带有 URL 扫描的图像。但是,我有 2000 多个具有相同域的 URL,而且我认为服务器不会让我一次性提取所有内容,因此在某些图像之后我总是会出错。我需要解决的问题 -
1) 如何确保完全下载图像然后只有代码移动到下一个 URL
2) 如何编写更好的代码
感谢您的帮助。谢谢你

var csv = require('fast-csv');
var Promise = require('bluebird');
var fs = require('fs'); 
var request = require('request');
var path = "test.csv";

var promiseCSV = Promise.method(function(path, options) {
  return new Promise(function(resolve, reject) {
    var records = [];
    csv
      .fromPath(path, options)
      .on('data', function(record) {
        records.push(record);
      })
      .on('end', function() {
        resolve(records);
        console.log('done');
      });
  });
});



var download = function(uri, filename, callback){
  request.head(uri, function(err, res, body){

    request(uri).pipe(fs.createWriteStream(filename)).on('close', callback);
  });
};


promiseCSV(path).then(function (records) {

for(i=0;i<records.length;i++)
  {     
        download(records[i][0],'img/'+records[i][1], function(){

        });
    }

});

【问题讨论】:

    标签: node.js csv web-crawler npm-request


    【解决方案1】:

    这会将您的请求一次限制为一个。另一种选择是使用throttled-request 来限制每单位时间的请求数。

    var i = 0;
    promiseCSV(path).then(function (records) {
      next();
      function next(){
        download(records[i][0],'img/'+records[i][1], function(){
          i++;
          if (i < records.length) next();
        });
      }
    });
    

    另外,您的记录变量超出范围,您需要将其移出才能访问它:

    var records = []; // move out to global scope to access from elsewhere
    var promiseCSV = Promise.method(function(path, options) {
      return new Promise(function(resolve, reject) {
        csv
          .fromPath(path, options)
          .on('data', function(record) {
            records.push(record);
          })
          .on('end', function() {
            resolve(records);
            console.log('done');
          });
      });
    });
    

    【讨论】:

    • 谢谢伙计!它现在正在运行:)
    猜你喜欢
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 2021-04-03
    • 2023-03-29
    • 2022-01-22
    相关资源
    最近更新 更多