javascript - 如何在 Node.js 中使用 Cheerio 抓取具有变化数据的表?
问题描述
我正在尝试从网站中不断变化的值的表中抓取数据。所以每一行可能每天都在变化,但我希望能够抓取正确的数据。我目前正在使用 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网站的链接: 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()
这让我回归
您绝对可以重构它,但这种方式使您的解析器动态化,因为您现在可以搜索任何国家/地区。
推荐阅读
- debian - 多次调用procmail外部命令
- neo4j - Spring Data Neo4j Repository Save 方法正在执行 UNWIND MATCH 插入 UNWIND CREATE
- computer-vision - 定义一个物体并检测同一张图片中的相似物体
- ios - 测试运行程序未能加载测试包
- python - Python:从文件列表中读取变量以计算方程
- spring - 在 application.properties spring boot 中分配 jenkins 变量
- python - 根据另一列中的数据从 csv 文件中的列中提取数据
- r - plotly 中的下拉过滤器,r - 不显示“全部”
- powershell - Powershell 隐藏选项卡到 HTML 邮件中的空格
- node.js - 无法使用 ReplyKeyboardRemove 删除 Telegram 键盘