nodejs 循環中操作需要同步執行解決方案


最近用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(); });


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM