如何使用Cheerio获得没有唯一标识符的特定元素值



我正在尝试使用Cheerio获取特定的元素值,但我不确定如何获取。我已经看过文件了,到目前为止,没有骰子。

我试图获得的值的网站示例,特别是包含玩家计数的数字值的<dd>

const URL = 'https://www.battlemetrics.com/servers/dayz/16108490';
axios(URL)
.then(response => {
const html = response.data
const $ = cheerio.load(html)
const players = []
$('.server-info', html).each(function() {
const scrape_test = $(this).text()
const pNum = $(this).find('dd').val()
players.push({
scrape_test,
pNum
})
})
console.log(players)
}).catch(err => console.log(err))

scrape_test只是确保我确实收到了数据,它确实抓取了包括我需要的值在内的数据,但我不知道如何细化它来具体抓取我需要的东西。

pNum的响应是未定义的,我尝试删除.val((,然后在其中接收6个数组元素,但当我尝试迭代它们以将它们推出时,我会得到另一个未定义的数组元素。如果我选择一个特定的位置,我同样会得到一个未定义的位置。

对于玩家计数值,您可以根据其文本内容过滤<dt>元素,然后提取下一个元素以找到相应的<dd>:

const $ = cheerio.load(html);
const dt = [...$("dt")]
.find(e => $(e).text().trim().toLowerCase() === "player count");
console.log($(dt).next().text()); // => 7/65

另一个选项是:contains()伪选择器和相邻的兄弟组合子:

const text = $('dt:contains("Player count") + dd').text();

另请参阅Cheerio:如何通过文本内容选择元素?

cheerio 1.0.0-rc.12

最新更新