nodejs
withを使用しcheerio
て Web サイトからデータをスクレイピングすると、そこからオブジェクトが作成されます。次に、そのオブジェクトを取得して関数で使用する必要があります。
問題は、オブジェクトが作成されているがcheerio
、データを適切に解析してオブジェクトに入れる前に、次の関数が既に実行されていることです。これが私のコードです:
function getInfo(obj, link){
request(link, function(err, resp, body) {
if (err) {
console.log("Uh-oh: " + err);
throw err;
}
$ = cheerio.load(body);
function createProduct(obj, callback){
var product = {
name : $('#name').text(),
gender : obj.gender,
infoLink : link,
designer : $('.label').first().text(),
price : $('#price').first().text(),
description : $('.description').text(),
date : new Date()
}
product.systemName = (function(){
return product.name.replace(/\s+/g, ' ');
}());
callback(product);
}
createProduct(obj, function(product){
lookUp(product);
});
ここではさまざまな結果が得られます。一部のproduct
オブジェクトは、すべての詳細が適切に入力された状態で関数に送信されています。説明が欠落しているものもあれば、入力されたすべてcheerio
のコンテンツが欠落しているものもあります。他のものにはcheerio
スクレイピングされたコンテンツがありますが、特定のビットが欠落しています. および属性は常に存在し、プロパティは存在しますが、それらは空白です (たとえばgender
、未定義ではなく戻ります)。date
product.name
""
問題のある各リンクを確認しましたが、すべてのページにスクレイピングする正しいセレクターが含まれています。
product
オブジェクトが入力されたら、コールバックを ONLY 関数に設定するにはどうすればよいですか?