nodejs使用http.request抓取网页。option中还可以设置其他参数,例如timeout: 50000。即请求超时的时间。也可以加一些自定义的参数,比如加一个tryTime: 3, 当请求出错后,在回调中tryTime--,如果>=0 那么回调中再次的调用一次spider。
回调函数示例
function callback(data, opt, encode) { if (data == null && opt.tryTimes-- > 0) { console.log('path ' + opt.path + ' error, try again'); spider(opt, encode, callback); return; } if (data == null) { console.log(opt.path + 'fail!'); return; } // process the data here }
spider模块如下
var http = require('http'); /** var options = { host: 'blog.discussquiz.com', port: 80, path: '/article/1', method: 'GET' }; */ function spiderUrl(opt, encode, fnSpiderData) { var req = http.request(opt, function(res) { res.setEncoding(encode); var g_data=''; res.on('data', function (chunk) { g_data += chunk; }); res.on('end', function() { fnSpiderData(g_data, opt, encode); }); }); req.on('error', function(e) { console.log('problem with request ' + opt.path + ' : ' + e.message); fnSpiderData(null, opt, encode); }); req.end(); } module.exports = spiderUrl;