2016-12-10 10 views
0

動的コンテンツを読み込むためにJavaScriptを使用するウェブサイトから一部のコンテンツをスクラップします。以前は、私はリクエストcheerioを掻き集めて使用しましたが、うまくいきました。しかし、私はちょうど要求cheerioが動的コンテンツを掻き取ることができないことを知ります。研究をした後、私はのphantomjsを見つけました。ページがロードされた後にすべてのコンテンツを取得できます。私は今それに問題がある、私は使用することはできませんjQueryセレクタ私はcheerioで使用されていたようです。これは私のサンプルコードですが、セレクタは何も返しません。PhantomjsでjQueryを使用してhtml要素を選択するには?

var page = require('webpage').create(); 
var url = 'http://angkorauto.com/vehicle'; 
page.open(url, function (status) { 
    if (status !== 'success') { 
     console.log('Unable to load the address!'); 
     phantom.exit(); 
    } else { 
     window.setTimeout(function() { 
      // console.log(page.content); 
      page.includeJs('https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js', function(){ 

       page.evaluate(function(){ 
        console.log($('.divTitle').find('a').attr('href')); 
       }); 
      }); 

      phantom.exit(); 
     }, 1500); 
    } 
}); 

この問題を解決できますか?私は今本当に立ち往生している。

ご協力いただきありがとうございます。

+0

あなたもこれだけのウェブサイト(ankkorauto.com)またはいくつかの他のウェブサイトからこすりしたいですか? –

+0

リクエストがあれば他にも欲しい、チエリオは使えない –

+0

何? cheerioって何? –

答えて

2

スクラップしたいウェブサイトにはjQueryが既にあります(他の多くのウェブサイトのように)。もう一度ロードしないでください。

これは正常に動作します:

var page = require('webpage').create(); 
var url = 'http://angkorauto.com/vehicle'; 
page.open(url, function(status) { 

    var href = page.evaluate(function(){ 
     return jQuery('.divTitle').find('a').attr('href'); 
    }); 

    console.log(href); 
}); 
+0

私はこれを試してみます –

+0

さて、ありがとう!これはうまく機能しました –

+2

このコードは、2つの問題を明確に説明することなく解決します。 1.別のjQueryバージョンをロードすると、サイト上のすべてのjQuery機能が破損する傾向があります。すでに利用可能な場合は、読み込まないでください。 2.ページコンテキスト( 'page.evaluate'の内部)の' console.log'呼び出しは、デフォルトでコンソールに出力されません。 'page.onConsoleMessage'イベントハンドラが必要です。 (@DooDoo) –

関連する問題