最近用nodejs做了個針對某網站的小爬蟲。干壞事得低調對吧,不能同時開太多的網絡訪問,結果各種回調/循環虐的心力交瘁。
經過了n次的百度\哥哥后終於拼出了自己要的功能。不敢獨享分享出來以供大家參考。
廢話不多說直接上代碼
var async = require("async");
var citysUrl=[];
var urlsArray=[];
async.eachSeries(citysUrl, function (city, nextcity) {//城市循環 channels.forEach(function (channel) {//組合url var options = GetOptions(channel); options.forEach(function (option) { var pageurl = GetUrl(city, channel, option); urlsArray.push(pageurl); }); }); console.log("開始抓取" + GetcityName(city) + "的產品信息"); async.eachSeries(urlsArray, function (url, next) { async.waterfall([function(cb){ Grab(url,cb);//Grab為異步抓取url操作function(url,cb){此處省略一萬字//異步完成時調用cb(null,html);} }, function(data,cb){ console.log('分析html'); cb(null,2) }],function(err,data){ console.log('一次循環結束');
next(); }); }, function (err,data) { console.log(GetcityName(city) + "產品抓取完成"); urlsArray = []; nextcity(); }); }, function () { console.log('所有城市產品抓取完成'); process.exit(); });