各位晚上好,
我研究了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;
}
2条答案
按热度按时间thigvfpy1#
你可以跟随“next()”元素直到你找到一个h3:
2vuwiymt2#
我看到至少有几种方法,取决于你想要什么。
也许你想选择一个
<h3>
,比如说第一个,然后遍历到它后面的<h3>
,收集所有的元素,忽略所有其他的<h3>
标记:这给出:
如果你愿意,它们可以很容易地连接起来。
另一种解释是,您希望将所有
<h2>
段分块到单独的子数组中:这给出了
另见: