Итак, я работал над скребком. Все было хорошо, пока я не попробовал очистить данные для отдельной ссылки.
А теперь поясню: у меня есть скребок, который собирает данные о квартирах. Теперь первый url — это страница, на которой расположены статьи (нужно получить примерно 29-30). Теперь на этой странице у меня нет информации о квадратных метрах, поэтому мне нужно запустить еще один парсер для каждой ссылки, которая была очищена, и очистить квадратные метры оттуда.
Вот код, который у меня есть:
const axios = require('axios');
const cheerio = require('cheerio');
const url = `https://www.olx.ba/pretraga?vrsta=samoprodaja&kategorija=23&sort_order=desc&kanton=9&sacijenom=sacijenom&stranica=2`;
axios.get(url).then((response) => {
const articles = [];
const $ = cheerio.load(response.data);
$('div[id="rezultatipretrage"] > div')
.not('div[class="listitem artikal obicniArtikal i index"]')
.not('div[class="obicniArtikal"]')
.each((index, element) => {
$('span[class="prekrizenacijena"]').remove();
const getLink = $(element).find('div[class="naslov"] > a').attr('href');
const getDescription = $(element)
.find('div[class="naslov"] > a > p')
.text();
const getPrice = $(element)
.find('div[class="datum"] > span')
.text()
.replace(/\.| ?KM$/g, '')
.replace(' ', '');
const getPicture = $(element)
.find('div[class="slika"] > img')
.attr('src');
articles[index] = {
id: getLink.substring(27, 35),
link: getLink,
description: getDescription,
price: getPrice,
picture: getPicture,
};
});
articles.map((item, index) => {
axios.get(item.link).then((response) => {
const $ = cheerio.load(response.data);
const sqa = $('div[class="df2 "]').first().text();
});
});
console.log(articles);
});
Теперь первая часть кода нравится как должна, я борюсь со второй частью.
Теперь я отображаю articles
, потому что там для каждой ссылки мне нужно загрузить ее в axios
функцию и получить данные о квадратных метрах.
Таким образом, моим желаемым результатом были бы обновленные статьи: со старыми объектами и ключевыми значениями внутри, но с ключевым sqm и значением очищенных sqaure meter.
Есть идеи, как этого добиться? Спасибо!
Вы можете просто добавить информацию о квадратных метрах к текущему _1 _ / _ 2_, примерно так:
Обратите внимание, что вам нужно дождаться разрешения всех сопоставленных обещаний, прежде чем регистрировать полученные статьи. Также обратите внимание, что с помощью
async/await
вы можете переписать свой код, чтобы он был немного чище, см. https://javascript.info/async-await.