Javascript 在对象的内部和数组中插入新的键值对,但值是由axios.get创建的
所以我一直在做刮刀。一切都很好,直到我尝试为单个链接抓取数据 现在我来解释一下:我有一个刮板,它可以帮我刮取关于公寓的数据。现在,第一个url是文章所在的页面(大约应该取29-30个)。现在在那个页面上我没有关于平方米的信息,所以我需要为每个被刮的链接运行另一个刮板,然后从那里刮平方米 以下是我的代码:Javascript 在对象的内部和数组中插入新的键值对,但值是由axios.get创建的,javascript,node.js,axios,Javascript,Node.js,Axios,所以我一直在做刮刀。一切都很好,直到我尝试为单个链接抓取数据 现在我来解释一下:我有一个刮板,它可以帮我刮取关于公寓的数据。现在,第一个url是文章所在的页面(大约应该取29-30个)。现在在那个页面上我没有关于平方米的信息,所以我需要为每个被刮的链接运行另一个刮板,然后从那里刮平方米 以下是我的代码: const axios = require('axios'); const cheerio = require('cheerio'); const url = `https://www.olx
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);
});
现在,代码的第一部分就像它应该的一样,我一直在努力解决第二部分
现在我正在映射文章
,因为在那里,对于每个链接,我需要将其加载到axios
函数中,并获取关于平方米的数据
所以我想要的输出是更新的文章:里面有旧的对象和键值,但有键值sqm和刮取的sqaure值
关于如何实现这一点有什么想法吗?
谢谢 您只需将有关平方米的信息添加到当前的
文章
/项目
,类似于:
const articlePromises = Promise.all(articles.map((item) => {
return axios.get(item.link).then((response) => {
const $ = cheerio.load(response.data);
const sqa = $('div[class="df2 "]').first().text();
item.sqm = sqa;
});
}));
articlePromises.then(() => {
console.log(articles);
});
请注意,在记录生成的文章之前,您需要等待所有映射的承诺得到解决。
还请注意,使用async/await
可以将代码重写得更干净一些,请参阅