我所有的抓取文本都以一个大对象结尾,而不是用Cheerio分隔为单独的对象

时间:2019-04-13 19:32:14

标签: node.js web-scraping cheerio

我正在学习使用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 谢谢!

1 个答案:

答案 0 :(得分:1)

那是因为您使用选择器的方式。我已修改您的脚本以按预期方式获取内容。当前,脚本正在收集titlescharacteristics。随时在脚本中添加其余部分。

这是获取所需输出的方法:

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();