如何为嵌套 div 格式化 cheerio 选择器?

How to format cheerio selector for a nested div?

我需要一些帮助来使用 cheerio:

抓取网站

https://www.keepandshare.com/calendar/mobile.php?i=1940971&do=n

我要抓取的文本就在 <p> 之后。我想从 calendar_one_line_text div.

中获取此文本的最后一次出现
<div class="calendar_one_line_text">
    <p>Cedar 3,044 gr/m3 High, Grass 27 gr/m3 High, Trees 27 gr/m3 Medium, Molds Low</p>
</div>

您将如何构造您的选择器以 return 此文本?

所以我们在这里需要关注的是 Cheerio 文档的选择器部分。

$( selector, [context], [root] )

select或在根范围内搜索的上下文范围内搜索。 selector and context 可以是字符串表达式、DOM 元素、DOM 元素数组或 cheerio 对象。 root 通常是 HTML 文档字符串。

此 selector 方法是遍历和操作文档的起点。与 jQuery 一样,它是在文档中 selecting 元素的主要方法,但与 jQuery 不同的是,它建立在 CSSSelect 库之上,该库实现了大部分 Sizzle select OR.

根据这些信息并查看您提供的 HTML,我们可以得出我们需要的 select 的结论!我们有一个 div 和 .calendar_one_line_text 的 class 并且在其中我们有 p 标签。

因此,根据 select 或者,我们 select 一些具体的内容,然后我们可以继续深入研究更具体的内容。从 .calendar_one_line_text 开始,然后抓住其中找到的 p 标签。

$('.calendar_one_line_text p').text()

有关完整示例,您可以查看我在哪里实现了上述文本。

const cheerio = require('cheerio');
const $ = cheerio.load(`<div class="calendar_one_line_text">
<p>Cedar 3,044 gr/m3 High, Grass 27 gr/m3 High, Trees 27 gr/m3 Medium, Molds Low</p>
</div>`);
const wordsAfterP = $('.calendar_one_line_text p').text()
console.log(wordsAfterP)

如果你想得到最后一次出现,你可以把wordsAfterP转换成一个数组,然后抓取最后的元素数据

const wordsAfterP = $('.calendar_one_line_text p').toArray()
console.log(wordsAfterP[wordsAfterP.length - 1].firstChild.data)