Node.js を使用した動的コンテンツを含むページのスクレイピング
Web スクレイパーにとって、動的コンテンツは課題を引き起こす可能性があります。そのような例の 1 つは、最初のページの読み込み後にページの要素が作成される場合です。このようなシナリオでは、標準のスクレイピング方法では十分ではない可能性があります。
Node.js で Cheerio を使用する場合は、この問題を考慮してください。次のコードは、ページから要素を取得しようとしますが、cheerio のロードが発生したときに動的要素が存在しません:
var request = require('request'); var cheerio = require('cheerio'); var url = "http://www.bdtong.co.kr/index.php?c_category=C02"; request(url, function (err, res, html) { var $ = cheerio.load(html); $('.listMain > li').each(function () { console.log($(this).find('a').attr('href')); }); });
このコードは、要素がまだページに存在していないため、空の応答を返すことがよくあります。 Cherio ロード時の HTML。では、Node.js を使用してこれらの要素を取得するにはどうすればよいでしょうか?
解決策: PhantomJS の利用
動的コンテンツを処理するには、PhantomJS (ヘッドレス Web ブラウザー) を使用できます。 JavaScriptを実行できる。 PhantomJS を使用すると、ページと対話するブラウザをシミュレートし、要素が利用可能になったときに要素を取得できます。 PhantomJS を使用した例を次に示します。
var phantom = require('phantom'); phantom.create(function (ph) { ph.createPage(function (page) { var url = "http://www.bdtong.co.kr/index.php?c_category=C02"; page.open(url, function() { page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() { page.evaluate(function() { $('.listMain > li').each(function () { console.log($(this).find('a').attr('href')); }); }, function(){ ph.exit() }); }); }); }); });
このコードでは、まず PhantomJS を使用してページに jQuery を組み込み、要素を動的に操作できるようにします。次に、要素の href 属性をコンソールに記録する JavaScript コードを評価します。
以上がNode.js を使用して動的 Web ページ コンテンツをスクレイピングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。