gpt4 book ai didi

javascript - 使用 cheerio 在两个标签之间进行网页抓取

转载 作者:行者123 更新时间:2023-12-05 07:23:29 62 4
gpt4 key购买 nike

大家晚上好

我研究了 cheerio 并尝试解析来自网站的数据。它的结构如下,我直接上正文:

<body>
<form>
<div class="a">
<h3>Text A</h3>
<h4> Sub-Text A</h4>
<div class="Sub-Class A"> some text </div>
<h4> Sub-Text B</h4>
<div class="Sub-Class B"> some text </div>
<h4> Sub-Text C</h4>
<div class="Sub-Class C"> some text </div>

<h3>Text B</h3>
...
...

<h3>Text C</h3>
</div>
</form>
</body>

任务是将数据解析到从h3到下一个h3的数组中(即h3,所有h4和它后面的div,但到下一个h3)。我开始编写一个函数,但遇到了上述问题。如何让函数理解我需要在数组的一个元素中的 h3 之后,但在下一个 h3 之前写下所有内容?

我现在的代码:

const Nightmare = require('nightmare');
const cheerio = require('cheerio');
const nightmare = Nightmare({show: true})
nightmare
.goto(url)
.wait('body')
.evaluate(()=> document.querySelector('body').innerHTML)
.end()
.then(response =>{
console.log(getData(response));
}).catch(err=>{
console.log(err);
});

let getData = html => {
data = [];
const $ = cheerio.load(html);
$('form div.a').each((i, elem)=>{
data.push({

});
});
return data;
}

最佳答案

您可以跟随“next()”元素直到找到 h3:

let texts = $('h3').map((i, el) => {
let text = ""
el = $(el)
while(el = el.next()){
if(el.length === 0 || el.prop('tagName') === 'H3') break
text += el.text() + "\n"
}
return text
}).get()

关于javascript - 使用 cheerio 在两个标签之间进行网页抓取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55974070/

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