2012-03-02 12 views
12

¿Es posible ejecutar esencialmente un wget desde una aplicación node.js? Me gustaría tener un script que rastree un sitio y descargue un archivo específico, pero el href del enlace que va con el archivo cambia con bastante frecuencia. Entonces, pensé que la manera más fácil de hacerlo sería encontrar el href del enlace, y luego realizar un wget en él.¿Cómo puedo replicar la funcionalidad de un wget con node.js?

Gracias!

+1

Consulte la documentación de node.js para ['child_process.exec (cmd)'] (http://nodejs.org/docs/latest/api/all.html# all_child_process_exec_command_options_callback). – maerics

Respuesta

8

Puede ejecutar un comando externo usando 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

Esto responde la pregunta, pero ¿por qué harías eso cuando puedes usar la solicitud? – dovidweisz

2

T simplemente puede usar 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"); 
} 
}); 
16

Para futuras referencias, sin embargo, yo recomendaría request, lo que hace que sea tan fácil para ir a buscar ese archivo:

var request = require("request"); 

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

Aunque podría ser un poco más detallado de lo algunas cosas de terceros, Nodo de HTTP núcleo módulo proporciona una HTTP client se puede utilizar para esto:

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); 
}); 
+1

Me gusta que esta respuesta solo utilice la biblioteca central de nodos. Buen trabajo – nic

+0

Si busca aún menos trabajo, sin agregar una dependencia, usar el método 'parse' del módulo' url' incorporado generará un objeto que puede usar en lugar de construir 'options'. (Suponiendo que ya tiene un URI de cadena para pasarlo). – Tersosauros

1

usted puede utilizar node-wget. Funciona en casos donde 'wget' no es posible

Cuestiones relacionadas