2

私は、cheerio を使用して node.js で、元のサイトへのリンクを使用して構築している Web サイト用に 10 個の Web サイトをスクレイピングしようとしています。私の質問は、その情報をどのように取得できるかです。たとえば、最初にボタンのクリックをトリガーしてから DOM を取得します。

第二に、同じDOM構造がすべてのデータを取得していません。あるページの情報を取得していますが、同じDOM構造を持つ別のページの要素を取得していません。任意の助けをいただければ幸いです。

ありがとうございます。 編集1:関連コード

$('#ProductContent').filter(function(){
                            var price = undefined;
                            var ukulele = false;
                            var model = $(this).find('.ProductSubtitle').text().replace(/\n\s*/g,"");
                            if(model.indexOf(/m/i) != 0){
                                var description = $(this).find('.RomanceCopy').text().replace(/\n\s*|\r/g,"");
                                .
                                .code removed for brevity and the variables present here are populated
                                .
                                //this children is populated only for one page.
                                children =  $(this).find('.SpecsColumn .SpecsTable table tbody').children('tr');
                                console.log('children: '+children.length)
                                console.log(guitar_url);
                                children.each(function(){
                                    var key = $(this).children('td').first().text();
                                    var value = $(this).children('td').last().text();
                                    specs[key] = value;
                                    console.log(specs); 
                                });

編集 2: Cherios の初期化

request(guitar_url,function(error,response,html){
                    if(!error){
                        var $ = cheerio.load(html);
                        $("#content #right-content").filter(function(){..children and other variables are populated inside here....})
                    }
 })
4

2 に答える 2

5

寄せられたすべてのコメントを要約すると、次のようになります。

Cheerio は、jQuery に触発された最小限の DOM リーダーです。その設計はデータの読み取りに重点を置いており、ボタンをクリックできるブラウザー エミュレーターではありません。

代わりに、 PhantomJSCasperJSなどのヘッドレス ブラウザーを使用することもできます。

これら 2 つは Node.js の範囲外であり、Node.js からヘッドレス ブラウザーにデータをやり取りするのに苦労する場合があります。

Node.js 環境内に保持することが重要な場合は、JSDOMを使用できます。

どれも Cheerio よりも使い方が複雑ですが、DOM を操作したい、DOM 上で JavaScript を実行したいなどの場合は、これが最適です。

于 2014-07-10T09:05:57.813 に答える
0

「tbody」タグを削除すると問題が解決しました。削除すると、3 つのサイトすべてのデータが正常に取得されるようになりました。

于 2014-07-14T06:46:41.477 に答える