Is it possible to essentially run a wget
from within a node.js app? I'd like to have a script that crawls a site, and downloads a specific file, but the href
of the link that goes the file changes fairly often. So, I figured the easiest way to go about doing it would be to find the href
of the link, then just perform a wget on it.
Thanks!
You can run an external command using 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);
}
});
For future reference though, I would recommend request, which makes it this easy to fetch that file:
var request = require("request");
request(url, function(err, res, body) {
// Do funky stuff with body
});
While it might be a little more verbose than some third-party stuff, Node's core HTTP
module provides for an HTTP client you could use for this:
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);
});
U can just use 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");
}
});
You can use node-wget.
Works in cases where 'wget' is not possible