如何使用node.js复制wget的功能?

Con*_*nor 12 javascript wget node.js

是否有可能wget从node.js应用程序中运行?我想要一个脚本来抓取一个站点,并下载一个特定的文件,但是该文件href的链接经常发生变化.所以,我认为最简单的方法是找到href链接,然后只需对它执行一个wget即可.

谢谢!

Lin*_*iel 17

但是为了将来参考,我建议使用request,这样可以很容易地获取该文件:

var request = require("request");

request(url, function(err, res, body) {
  // Do funky stuff with body
});
Run Code Online (Sandbox Code Playgroud)


Wes*_*son 14

虽然它可能比某些第三方内容更冗长,但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);
});
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个答案只使用核心 Node 库。干得好 (2认同)

mrw*_*ter 8

您可以使用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);
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 这回答了这个问题,但是当你可以使用请求时,为什么要这样做呢? (2认同)