我正在学习使用Cheerio的网络抓取课程。我在一个不同的网站上进行练习,然后在课程中使用它们,现在我遇到了一个问题,就是我所有的抓取文本最终都变成一个大对象。但是每个标题都应该以它自己的对象结尾。有人可以看到我做错了吗?我已经在这个问题上呆了2个小时。
const request = require('request-promise');
const cheerio = require('cheerio');
const url = "https://huurgoed.nl/gehele-aanbod";
const scrapeResults = [];
async function scrapeHuurgoed() {
try {
const htmlResult = await request.get(url);
const $ = await cheerio.load(htmlResult);
$("div.aanbod").each((index, element) => {
const result = $(element).children(".item");
const title = result.find("h2").text().trim();
const characteristics = result.find("h4").text();
const scrapeResult = {title, characteristics};
scrapeResults.push(scrapeResult);
});
console.log(scrapeResults);
} catch(err) {
console.error(err);
}
}
scrapeHuurgoed();
这是仓库的链接:https://github.com/danielkroon/huurgoed-scraper/blob/master/index.js 谢谢!
答案 0 :(得分:1)
那是因为您使用选择器的方式。我已修改您的脚本以按预期方式获取内容。当前,脚本正在收集titles
和characteristics
。随时在脚本中添加其余部分。
这是获取所需输出的方法:
const request = require('request-promise');
const cheerio = require('cheerio');
const url = "https://huurgoed.nl/gehele-aanbod";
const scrapeResults = [];
async function scrapeHuurgoed() {
try {
const htmlResult = await request.get(url);
const $ = await cheerio.load(htmlResult);
$("div.item").each((index, element) => {
const title = $(element).find(".kenmerken > h2").text().trim();
const characteristics = $(element).find("h4").text().trim();
scrapeResults.push({title,characteristics});
});
console.log(scrapeResults);
} catch(err) {
console.error(err);
}
}
scrapeHuurgoed();