如何在 Node.js 中使用 Cheerio 通过更改数据来抓取 table?
How to scrape a table with changing data using Cheerio in Node.js?
我正在尝试从一个值不断变化的网站table中抓取数据。所以每一行每天都在变化,但我希望能够抓取正确的数据。我目前正在使用 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 之间变化。这导致我的程序获取了错误的信息。这就是我要解决的问题。
这里是 worldometer 网站的 link:
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);
$('#main_table_countries').find('tbody').eq(0).find('tr').each((i,el)=>{
NamesArr.push($(el).find('td').eq(0).text().trim())
})
let Index= NamesArr.indexOf(CountryToFind) + 1
$(`#main_table_countries > tbody:nth-child(2) > tr:nth-child(${Index})`).each((i,el) => {
const item = $(el).text();
console.log(item);
});
}
main()
这个Returns我
您绝对可以重构它,但这样可以使您的解析器动态化,因为您现在可以搜索任何国家/地区。
为此使用 :contains 伪:
$('tr:contains(Italy)').text()
//" Italy 9,172 +1,797 463 +97 724 7,985 733 151.7 "
我正在尝试从一个值不断变化的网站table中抓取数据。所以每一行每天都在变化,但我希望能够抓取正确的数据。我目前正在使用 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 之间变化。这导致我的程序获取了错误的信息。这就是我要解决的问题。
这里是 worldometer 网站的 link: 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);
$('#main_table_countries').find('tbody').eq(0).find('tr').each((i,el)=>{
NamesArr.push($(el).find('td').eq(0).text().trim())
})
let Index= NamesArr.indexOf(CountryToFind) + 1
$(`#main_table_countries > tbody:nth-child(2) > tr:nth-child(${Index})`).each((i,el) => {
const item = $(el).text();
console.log(item);
});
}
main()
这个Returns我
您绝对可以重构它,但这样可以使您的解析器动态化,因为您现在可以搜索任何国家/地区。
为此使用 :contains 伪:
$('tr:contains(Italy)').text()
//" Italy 9,172 +1,797 463 +97 724 7,985 733 151.7 "