2

関数を使用してページの情報をスクレイピングしようとしていjsdom.envます。ただし、env()コールバックで返されるページは、ブラウザで同じ URL を読み込んだときに表示されることを望んでいるコンテンツではなく、サーバーへのアクセスが拒否された方法に関するものです。

したがって、ブラウザーがページをロードする方法と jsdom がページをロードする方法に違いがあるようです。jsdomこれはモジュールで構成できるものですか?

編集:

URL の例:http://www.bestbuy.com/site/HP+-+20%22+Widescreen+Flat-Panel+LCD+Monitor/1422209.p?id=1218257754431&skuId=1422209

アップデート:

問題は、user-agent http ヘッダーを指定していない jsdom でした。以下の詳細な回答を見てください

4

2 に答える 2

1

問題はjsdom、bestbuy.com サーバーがチェックしている「User-Agent」http ヘッダーを指定していないことでした。空の場合、アクセスは拒否されます。現在、これを指定する方法はありませんjsdom- https://github.com/tmpvar/jsdom/issues/196

モジュールを使用しrequestてページのコンテンツを取得し、次にに渡しjsdomて作業するという回避策がありました。このrequestモジュールを使用すると、ユーザー エージェントを指定できます

例:

var request = require('request'),

getPage = function(someUri, callback) {
  request({uri: someUri, headers:{'User-Agent': 'Mozilla/5.0'}}, function (error, response, body) {
    console.log("Fetched " +someUri+ " OK!");
    callback(body);
  });
}

getPage('http://www.bestbuy.com/', function(body) {
   console.log(body)
});
于 2011-12-31T04:31:38.777 に答える