如何在Node.js中使用Cheerio刮擦更改数据的表?

问题描述 投票:0回答:1

我正在尝试从值不断变化的网站中的表中擦除数据。因此,每一行每天都会变化,但我希望能够抓取正确的数据。我目前正在使用Cheerio库,但我对此并不熟悉,但这是我所拥有的:

const rp = require("request-promise");
const cheerio = require("cheerio");

let Italy = "";

async function main() {
    const result = await rp.get("https://www.worldometers.info/coronavirus/");
    const $ = cheerio.load(result);

    $("#main_table_countries > tbody:nth-child(2) > tr:nth-child(2)").each((i,el) => {
        const item = $(el).text();
        Italy = item;
    });
}

因此,您可以从worldometer网站上刮取意大利冠状病毒病例的数据。但是,在过去几天中,意大利的位置一直在2到3之间变化。这导致我的程序获取了错误的信息。这是我要解决的问题。

以下是指向世界温度计网站的链接:https://www.worldometers.info/coronavirus/

谢谢,卡尔提克

javascript node.js web-scraping cheerio request-promise
1个回答
0
投票

我实现的是,您可以获取所有的tr's并在其上循环以获取所有名称并将其添加到数组中,然后使用数组索引来查找所需的任何国家/地区

async function main() {
    let NamesArr=[]
    let CountryToFind= 'Italy'


    const result = await rp.get("https://www.worldometers.info/coronavirus/");
    const $ = cheerio.load(result);
    let trs=$('#main_table_countries').find('tbody').eq(0).find('tr')

    for(let i =0 ;i<trs.length;i++){
        NamesArr.push(trs.eq(i).find('td').eq(0).text().trim())
    }

    let Index= NamesArr.indexOf(CountryToFind) + 1  // +1 because of nth child

    $(`#main_table_countries > tbody:nth-child(2) > tr:nth-child(${Index})`).each((i,el) => {
        const item = $(el).text();
        console.log(item);
    });
}

main()

此返回我

CMD Result Image

您绝对可以对其进行重构,但是这种方式使您的解析器具有动态性,因为您现在可以搜索任何国家。

© www.soinside.com 2019 - 2024. All rights reserved.