Как я могу скопировать функциональность wget с node.js? - PullRequest
12 голосов
/ 03 марта 2012

Можно ли по существу запустить wget из приложения node.js?Я хотел бы иметь скрипт, который сканирует сайт и загружает определенный файл, но href ссылки, которая идет в файл, меняется довольно часто.Итак, я решил, что самый простой способ сделать это - найти href ссылки, а затем просто выполнить wget для нее.

Спасибо!

Ответы [ 5 ]

17 голосов
/ 03 марта 2012

Для дальнейшего использования я бы порекомендовал request , что облегчает получение этого файла:

var request = require("request");

request(url, function(err, res, body) {
  // Do funky stuff with body
});
14 голосов
/ 03 марта 2012

Хотя это может быть немного более многословно, чем некоторые сторонние материалы, базовый модуль Node HTTP предусматривает HTTP-клиента , который вы можете использовать для этого:

var http = require('http');
var options = {
    host: 'www.site2scrape.com',
    port: 80,
    path: '/page/scrape_me.html'
  };
var req = http.get(options, function(response) {
  // handle the response
  var res_data = '';
  response.on('data', function(chunk) {
    res_data += chunk;
  });
  response.on('end', function() {
    console.log(res_data);
  });
});
req.on('error', function(err) {
  console.log("Request error: " + err.message);
});
8 голосов
/ 03 марта 2012

Вы можете запустить внешнюю команду, используя child_processes:

http://nodejs.org/docs/latest/api/child_process.html#child_process_child_process_exec_command_options_callback

var util = require('util'),
    exec = require('child_process').exec,
    child,
    url = 'url to file';

child = exec('wget ' + url,
  function (error, stdout, stderr) {
    console.log('stdout: ' + stdout);
    console.log('stderr: ' + stderr);
    if (error !== null) {
      console.log('exec error: ' + error);
    }
});
2 голосов
/ 08 февраля 2013

Вы можете использовать node-wget .Работает в случаях, когда «wget» невозможен

2 голосов
/ 03 марта 2012

U можете просто использовать wget.

var exec = require('child_process').exec;

child = exec("/path/to/wget http://some.domain/some.file", function (error, stdout, stderr) {
if (error !== null) {
  console.log("ERROR: " + error);
}
else {
  console.log("YEAH IT WORKED");
}
});
...