2016-09-21 6 views
0

私はyelpからスクレイプしようとしており、以下のコードを添付しています。私は配列にデータを格納する際に問題があります。 、私は配列にデータをプッシュしようとするたびにレスポンス後ノードJSで配列プッシュが永遠に起こる

... 
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... 
     });   
    } 
}); 

だから、それだけでは動作しません永遠に待ち続ける:

は、ここに私のコードです。プッシュを削除すると、すべてのデータを管理します。

私はフィルターの代わりにそれぞれを試しましたが、運はありません。手動で配列インデックスに入れようとしましたが、まだ動作しませんでした。コードで何が間違っているのか分かりますか?

UPDATE

私は、ページの上部にこれを追加しました。

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

'title.push'としてtitleを割り当てる動作しません。プロパティは未定義からプッシュ '? – vlaz

+0

私はそれをvar title = [];として定義しました。 –

+0

'これをページの先頭に追加しました。 'しかし' title'はまだ定義されていません。 'phone'だけが新しい配列に割り当てられ、他のすべての変数は単に宣言されますが、それ以外の場合は初期化されません。 – vlaz

答えて

0

タイトルの初期化はどこですか?私は宣言を見ていますが、タイトルを配列として初期化するようにシステムに指示するものは何もありません。

は、システムが、それはあなたがを求めてきたものに近いを与えることができることを確認するパラメータの種類と互換性を決定するプロセスを経る必要があり、初期化せずに

... 
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... 
     });   
    } 
}); 

を試してみてください。場合によっては、変数を明示的に定義することで、このプロセスを高速化できます。

これでもtitle.countを使用する必要はありません.title.lengthには要素の数が含まれています。しかし、あなたはtitle` `には何も割り当てられていない - - そのコードは`得ることができないと失敗してはならない

0

pushuntilが配列型

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

ねえ、それはタイトル= []、私の悪いと動作しますが、私はページの上部にそれを初期化したばかりで、コードを更新しました。 –

+0

あなたはまだ配列としてタイトルを割り当てていません – abdulbarik

+0

ねえ、持っています、悪いです。間違いを指摘してくれてありがとう。 –

関連する問題