我是韩国人,英语说得不好,所以请您谅解。
我正在创建使用搜索字词和页码并对其进行爬网的代码。
let promises = []; //promise save
let totalData = []; //final data
let makeRequest = function(url) {
return new Promise((resolve, reject) => {
request(url, function(err, response, body){
if(body == null) { return reject('fail'); }
const $ = cheerio.load(body);
let parsingData = $('.g .r a');
console.log(parsingData);
for(let i = 0; i < parsingData.length; i++){
totalData.push(parsingData[i]);
}
return resolve('success');
});
});
}
//promises push
for(let i = 0; i < pageCount; i++){
let url = `https://google.com/search?q=${ searchWord }&start=${i}0`
promises.push(makeRequest(url));
}
(async function(){
try{
await Promise.all(promises);
console.log(totalData);
return res.json(true);
}
catch(error){
console.log(error);
return res.json(false);
}
});
我已经确认所有承诺都将从待定更改为已解决。
我还注意到我导入到爬网中的数据是正常的。
但是我不知道为什么异步和等待不起作用。 console.log(totalData);无法执行。
答案 0 :(得分:1)
此部分:
initial_article = InitialArticle.objects.filter(...).first()
initial_article.article_set.all() # return all articles which have foreign key to this article
看起来好像您正在尝试创建IIFE,但是在这种情况下,您已经创建了一个匿名函数,但是没有调用它。因此,该函数内的任何代码都不会执行。您需要在其末尾添加额外的括号集以调用该函数:
(async function(){
try{
await Promise.all(promises);
console.log(totalData);
return res.json(true);
}
catch(error){
console.log(error);
return res.json(false);
}
});