2016-09-21 3 views
0

Ich versuche, von yelp kratzen und habe den folgenden Code beigefügt. Ich habe Probleme beim Speichern der Daten im Array.Array Push dauert für immer in Node JS nach Antwort

Hier ist mein Code:

... 
var id, title, link, neighborhood, address, phone = []; 

router.get('/', function(req, res, next) { 
var cheerio = require('cheerio'); 

while (scrapepage) { 
    var options = { 
     uri: 'https://www.yelp.co.uk/search?find_desc='+find+'&find_loc='+city+''+'&start='+page, 
     transform: function (body) { 
      return cheerio.load(body); 
     } 
    }; 

    page += 10; 
    rp(options) 
     .then(function ($) { 


      var json = { id: "", title : "", link : "", neighborhood : "", address : "", phone : ""};     

      $('.biz-name span').filter(function(){ 
       var data = $(this).text(); 
       console.log(data); 
       //title.push(data); 
       title_count++; 
      }); 

      ... 

      res.send('Check your console!') 
     }) 
     .catch(function (err) { 
      // Crawling failed or Cheerio choked... 
     });   
    } 
}); 

Also, wenn ich versuche, die Daten-Array zu schieben, es funktioniert einfach nicht, hält ewig warten. Wenn ich den Push entferne, tröstet er alle Daten.

Ich habe auch mit jedem statt Filter versucht, aber kein Glück. Auch versucht, manuell in Array-Index, noch nicht funktioniert. Darf ich wissen, was ich falsch im Code mache?

UPDATE

Ich habe dies an der Spitze der Seite hinzugefügt.

var id, title, link, neighborhood, address, phone = []; 
+0

'title.push' zuweisen - aber Sie haben nichts zu' title' zugewiesen - sollte dieser Code nicht mit 'kann andernfalls nicht erhalten Property Push von undefined'? – vlaz

+0

Ich habe es als var title = [] definiert; –

+0

'Ich habe das oben auf der Seite hinzugefügt.' 'Title' ist jedoch immer noch nicht definiert. Nur ein "Telefon" ist einem neuen Array zugewiesen, alle anderen Variablen sind lediglich deklariert, aber ansonsten nicht initialisiert. – vlaz

Antwort

0

Ich müsste fragen, wo ist der Titel initialisiert? Ich sehe die Deklaration, aber nichts, das dem System sagt, den Titel als Array zu initialisieren.

versuchen

... 
router.get('/', function(req, res, next) { 
var cheerio = require('cheerio'); 

while (scrapepage) { 
    var options = { 
     uri: 'https://www.yelp.co.uk/search?find_desc='+find+'&find_loc='+city+''+'&start='+page, 
     transform: function (body) { 
      return cheerio.load(body); 
     } 
    }; 

    page += 10; 
    rp(options) 
     .then(function ($) { 

      var title = [], 
       release, rating; 
      var json = { id: "", title : "", link : "", neighborhood : "", address : "", phone : ""};     

      $('.biz-name span').filter(function(){ 
       var data = $(this).text(); 
       console.log(data); 
       title.push(data); 
       title_count++; 
      }); 

      ... 

      res.send('Check your console!') 
     }) 
     .catch(function (err) { 
      // Crawling failed or Cheerio choked... 
     });   
    } 
}); 

ohne die Initialisierung des System durch einen Prozess kann man so nah an, was Sie haben gefragt, gibt sicher seinen Typen und Kompatibilität von Parametern zur Bestimmung gehen. Manchmal kann die explizite Definition einer Variablen diesen Prozess beschleunigen.

auch mit diesem sollten Sie nicht title_count als title.length würde die Anzahl der Elemente haben.

0

push wird nicht funktionieren untiltitle als Array-Typ

then(function ($) { 

      var title=[]; 
      var release, rating; 
      var json = { id: "", title : "", link : "", neighborhood : "", address : "", phone : ""};     

      $('.biz-name span').filter(function(){ 
       var data = $(this).text(); 
       console.log(data); 
       title.push(data); 
       title_count++; 
      }); 

      ... 

      res.send('Check your console!') 
     }) 
+0

Hey ja, es funktioniert mit title = [], mein Schlechter, aber ich habe es oben auf der Seite initialisiert, nur den Code aktualisiert. –

+0

Sie noch nicht Titel als Array zuweisen – abdulbarik

+0

Hey ja, hab es., Mein Schlechter. Danke für den Hinweis auf den Fehler. –