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

Javascript 如何使用node.js复制wget的功能?,javascript,node.js,wget,Javascript,Node.js,Wget,是否可以从node.js应用程序中运行wget?我希望有一个脚本可以抓取一个站点,并下载一个特定的文件,但是文件中链接的href经常变化。因此,我认为最简单的方法是找到链接的href,然后对其执行wget 谢谢 您可以使用子进程运行外部命令: 你可以直接使用wget var exec = require('child_process').exec; child = exec("/path/to/wget http://some.domain/some.file", function (err

是否可以从node.js应用程序中运行
wget
?我希望有一个脚本可以抓取一个站点,并下载一个特定的文件,但是文件中链接的
href
经常变化。因此,我认为最简单的方法是找到链接的
href
,然后对其执行wget


谢谢

您可以使用子进程运行外部命令:

你可以直接使用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");
}
});

不过,为了便于将来参考,我建议您使用以下方法获取该文件:

var request = require("request");

request(url, function(err, res, body) {
  // Do funky stuff with body
});

虽然它可能比一些第三方的东西更详细一些,但Node的核心
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);
});
你可以用。
适用于无法使用“wget”的情况

有关详细信息,请参阅node.js文档。所有当前答案都太复杂。有一个简单的文件流解决方案。我喜欢这个答案只利用核心节点库。好的工作如果您正在寻找更少的工作,而不添加依赖项,那么使用内置的
url
模块的
parse
方法将生成一个对象,您可以使用它来代替构建
选项。(假设您已经有一个字符串URI要传递给它)。这回答了这个问题,但当您可以使用request时,为什么要这样做呢?
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);
});