我正在使用Request-Promise和cheerio来爬取一些网站数据,基本上我想要实现以下目标:
- 创建一个空数组
- 登录
- 从一个页面获取一些信息并将对象推入数组
- 从另一个页面获取一些信息并将对象推入数组
- 对于数组中的每个新对象,我需要:
- 转到存储在该对象中的URL{link: "some url", items: []}
- 循环遍历该链接中找到的所有项,并将其作为迭代对象中的items数组推送,如下所示:{link: "some url", items: [{item},{item}]}.
- 访问完成的orderArray,它应该输出类似于这样的内容:
{link: "some url", items: [{item},{item}]}, {link: "some url", items: [{item},{item}]}, {link: "some url", items: [{item},{item}]}
第六步是我遇到问题的地方,我不知道如何在不嵌套for循环的情况下完成这个步骤,因为我的代码就像下面一样开始变得混乱。有没有人能指点一下我应该怎么做?
这是我现在的代码:
let orderArray = [];
rp.post(login)
.then(function(res1){
// Login & Set Cookies
cookieJar = res1.headers['set-cookie'];
return rp(getOpenOrders);
})
.then(function($){
// Get Some Info from getOpenOrders
orderArray.push({info});
return rp(getShippedOrders);
})
.then(function($){
// Get Some Info from getShippedOrders
orderArray.push({info});
return orderArray;
})
.then(function($){
// Loop through each object in the orderArray
for (i = 0,; i < orderArray.length; i++){
rp(orderArray[I].link)
.then(function($){
//Get length of items on page
let itemsOnPage = $('tbody tr').length;
//Get some more details for each object
for (j = 0,; j < items.length; j++) {
let moreinfo = {…};
orderArray.items.push(moreinfo);
}
}
}
return orderArray;
})
.then(function($){
// Log finished Array
console.log(orderArray);
})
.catch(function(err){
console.log(err);
})
};