Я пытаюсь создать веб-скребок, используя Javascript и Cheerio, и у меня возникают некоторые трудности, когда я пытаюсь очистить данные с URL-адресов на страницах соскоба. Например, я очищаю первую страницу для нескольких деталей (включая URL-адрес связанной страницы), а затем, когда я пытаюсь очистить связанную страницу, используя функцию обратного вызова, я не могу назначить возвращаемое значение для объекта. Оба скребка работают по отдельности, однако у меня возникают проблемы с их асинхронной работой, и переменная detailsPage всегда возвращается как неопределенная.
Любая помощь будет принята с благодарностью!
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();