2012-03-02 10 views
12

क्या यह अनिवार्य रूप से wget को node.js ऐप से चलाने के लिए संभव है? मैं एक ऐसी स्क्रिप्ट लेना चाहता हूं जो किसी साइट को क्रॉल करे, और एक विशिष्ट फ़ाइल डाउनलोड करे, लेकिन फ़ाइल में जाने वाले लिंक के href काफी बार बदलते हैं। इसलिए, मुझे यह पता लगाने का सबसे आसान तरीका पता चला कि लिंक के href को ढूंढना होगा, फिर बस उस पर एक wget प्रदर्शन करें।मैं wode.js के साथ wget की कार्यक्षमता को दोहरा सकता हूं?

धन्यवाद!

+1

['child_process.exec (cmd)'] के लिए node.js दस्तावेज़ देखें (http://nodejs.org/docs/latest/api/all.html# all_child_process_exec_command_options_callback)। – maerics

उत्तर

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

यह सवाल का उत्तर देता है, लेकिन जब आप अनुरोध का उपयोग कर सकते हैं तो आप ऐसा क्यों करेंगे? – dovidweisz

2

यू सिर्फ 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

भविष्य में संदर्भ के लिए हालांकि, मैं request की सिफारिश करेंगे, जो यह इस आसान है कि फाइल को लाने के लिए बनाता है:

var request = require("request"); 

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

यह कुछ तृतीय-पक्ष सामान की तुलना में थोड़ा अधिक वर्बोज़ हो सकती है, नोड के कोर HTTP मॉड्यूल एक HTTP client आप इस के लिए इस्तेमाल कर सकते हैं के लिए प्रदान करता है:

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

मुझे यह पसंद है कि यह उत्तर केवल कोर नोड लाइब्रेरी का उपयोग करता है। अच्छा काम – nic

+0

यदि आप निर्भरता जोड़ने के बिना भी कम काम की तलाश में हैं, तो अंतर्निहित 'url' मॉड्यूल की' पार्स 'विधि का उपयोग करके एक ऑब्जेक्ट उत्पन्न होगा जिसका उपयोग आप' विकल्प' बनाने के बजाय कर सकते हैं। (मान लें कि आपके पास पहले से ही एक स्ट्रिंग यूआरआई पास है)। – Tersosauros

1

आप node-wget उपयोग कर सकते हैं। उन मामलों में काम करता है जहां 'wget' संभव नहीं है

संबंधित मुद्दे