gpt4 book ai didi

javascript - 如何使用选择器过滤 `each` 中的 cheerio 对象?

转载 作者:搜寻专家 更新时间:2023-11-01 00:21:22 24 4
gpt4 key购买 nike

我正在使用 Cheerio 解析一个简单的网页,如果可能的话,我正在徘徊:

使用这种结构的 html:

<tr class="human">
<td class="event"><a>event1</a></td>
<td class="name">name1</td>
<td class="surname"><a>surname1</a></td>
<td class="date">2011</td>
</tr>
<tr class="human">
<td class="event"><a>event2</a></td>
<td class="name">name2</td>
<td class="surname"><a>surname2</a></td>
<td class="date">2012</td>
</tr>
<tr class="human">
<td class="event"><a>event3</a></td>
<td class="name">name3</td>
<td class="surname"><a>surname3</a></td>
<td class="date">2013</td>
</tr>

一旦我得到所有与 tr.human 选择器匹配的 cheerio 对象,我希望能够遍历它们以映射类 name 中的值对象的姓氏等。

到目前为止我实现了这个:

var cheerio = require('cheerio');
var fs = require('fs')

fs.readFile('./humans.html', 'utf8', function (err,data) {
if (err) {
return console.log(err);
}

const $ = cheerio.load(data)
var results = $('tr.human')

results.each(function(i, result){

var date = result.children[3]
var name = result.children[1]
var surname = result.children[2]

var object = {"name":name,"date":date,"surname":surname}
})
});

但我想摆脱在 children 中调用索引,而是想通过选择器过滤 result,如下所示:

var date = result.children('td.date')

但以上会导致以下错误:

var date = result.children('td.date')
^
TypeError: result.children is not a function

我是 node 和 cheerio 的新手,请阅读 Cheerio 文档,但我对这个很感兴趣。如何使用选择器获取某些类下的值?

我必须承认我希望首先循环遍历元素并在每次迭代中映射到对象,而不是匹配选择器然后循环,因为这可能不能保证匹配结果中元素的正确顺序( loop 和 filter 在这里不是可交换的),还是可以?

最佳答案

result 是一个裸元素,没有包裹在 cheerio 中。与 jQuery 类似,您可能希望将其再次包装在 $()

var date = $(result).children('td.date');

关于javascript - 如何使用选择器过滤 `each` 中的 cheerio 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43381891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com