Javascript 努力抓取多个页面-Cheerio.js
我正在尝试使用Javascript和Cheerio创建一个web刮板,当我试图从被刮板的页面中的url中刮板数据时,遇到了一些困难。例如,我在第一个页面上刮取一些细节(包括链接页面的URL),然后当我尝试使用回调函数刮取链接页面时,我无法将返回值分配给对象。两个scraper都可以单独工作,但是我在异步运行它们时遇到了问题,变量detailsPage总是以未定义的形式返回 任何帮助都将不胜感激Javascript 努力抓取多个页面-Cheerio.js,javascript,node.js,asynchronous,web-scraping,cheerio,Javascript,Node.js,Asynchronous,Web Scraping,Cheerio,我正在尝试使用Javascript和Cheerio创建一个web刮板,当我试图从被刮板的页面中的url中刮板数据时,遇到了一些困难。例如,我在第一个页面上刮取一些细节(包括链接页面的URL),然后当我尝试使用回调函数刮取链接页面时,我无法将返回值分配给对象。两个scraper都可以单独工作,但是我在异步运行它们时遇到了问题,变量detailsPage总是以未定义的形式返回 任何帮助都将不胜感激 const cheerio = require("cheerio"); const axios = r
const cheerio = require("cheerio");
const axios = require("axios");
const scrapeAllData = () => {
return scrapeListingPage(scrapeFullDetailsPage, "www.fakeURL.com");
};
function scrapeListingPage(callbackFn, url) {
axios.get(url)
.then(response => {
const $ = cheerio.load(response.data);
let products = [];
let singleProduct = {};
$(".page-content-thumbs-two .row .col-sm-8").each((i, e) => {
singleProduct = {
price: $(e).find($("h3")),
shortDescription: $(e).find($("p")),
fullProductDetailsURL: $(e).find($("a")).attr("href"),
detailsPageData: {}
};
singleProduct.detailsPage = scrapeFullDetailsPage(singleProduct.fullDescriptionURL);
products.push(singleProduct);
});
console.log("Product DATA --> ", products);
});
}
function scrapeFullDetailsPage(url) {
axios.get(url).then(res => {
const $ = cheerio.load(res.data);
let detailsPageData = {};
$("#container").each((i, e) => {
detailsPageData.fullDescription = $(e)
.find($("p span"))
.text();
});
console.log("detailsPageData", detailsPageData);
return detailsPageData;
});
}
scrapeAllData();
您的
singleProduct.detailsPage
始终为空的原因是scrapfulldetailspage()
函数本质上是异步的,因为axios库是基于承诺的
请作为一种可能的解决方案进行研究,我希望它能有所帮助。没错,但如果他们只是将console.log移到scrapfulldetailspage的末尾,那就好了。