我正在尝试从值不断变化的网站中的表中擦除数据。因此,每一行每天都会变化,但我希望能够抓取正确的数据。我目前正在使用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/
谢谢,卡尔提克
我实现的是,您可以获取所有的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()
此返回我
您绝对可以对其进行重构,但是这种方式使您的解析器具有动态性,因为您现在可以搜索任何国家。