【发布时间】:2023-02-16 01:01:49
【问题描述】:
我想在具有以下布局的 nodejs 中使用 Cheerio 获取 JSON 输出:
[
{
teamName: 'M08-ARG',
time: '16:00 - 17:00',
veld: 1CD
}
...
{
teamName: 'J08-SPA',
time: '16:00 - 17:00',
veld: 1A
}
]
(部分)我网站的 html 是:
<div class="matches_container">
<section class="column matches screen5">
<ul class="jcarousel-skin-tango">
<li class="bg-title-list">
<h3 class="tite-list">Meisjes</h3>
</li>
<li class="position-list">
<div class="teamName">
M08-ARG
</div>
<time>
16:00 - 17:00
</time>
<div class="text">
<span class="img"> </span>Veld 1CD
</div>
</li>
<li class="position-list">
<div class="teamName">
M08-IND
</div>
<time>
16:00 - 17:00
</time>
<div class="text">
<span class="img"> </span>Veld 1B
</div>
</li>
<li class="position-list">
<div class="teamName">
MO8-BEL
</div>
<time>
16:00 - 17:00
</time>
<div class="text">
<span class="img"> </span>Veld 1CD
</div>
</li>
</ul>
</section>
<section class="column matches screen5">
<ul class="jcarousel-skin-tango">
<li class="bg-title-list"></li>
<h3 class="tite-list">Jongens</h3>
</li>
<li class="position-list">
<div class="teamName">
J08-ARG
</div>
<time>
16:00 - 17:00
</time>
<div class="text">
<span class="img"> </span>Veld 1A
</div>
</li>
<li class="position-list">
<div class="teamName">
J08-BEL
</div>
<time>
16:00 - 17:00
</time>
<div class="text">
<span class="img"> </span>Veld 1A
</div>
</li>
<li class="position-list">
<div class="teamName">
J08-SPA
</div>
<time>
16:00 - 17:00
</time>
<div class="text">
<span class="img"> </span>Veld 1A
</div>
</li>
</ul>
</section>
</div>
到目前为止我所拥有的:
console.log('1') //debug
var result = [];
$('#Left > div > section:nth-child(1) > ul').each(function(el) {
console.log('2') //debug
var $li = $(el).find('li');
var obj = {
teamName: $li.find('div.teamName').text(),
time: $li.find('time').text(),
veld: $li.find('div.text > span').text()
};
console.log(obj)
result.push(obj);
});
console.log(result)
我确实在控制台中登录了“1”。到目前为止一切正常。但是,我也应该看到一些数字 2,但没有。我想我的选择器出了问题。如果我使用 Chrome 检查元素,例如。 teamName,它出现了#Left > div > section:nth-child(1) > ul > li:nth-child(2) > div.teamName,time 出现了#Left > div > section:nth-child(1) > ul > li:nth-child(2) > time,而 veld 出现了#Left > div > section:nth-child(1) > ul > li:nth-child(2) > div.text > span
控制台输出:
Opening the browser...... 1 []
由于结构看起来相同,因此我已使用 this 问题的答案作为我的代码的参考。
【问题讨论】:
标签: javascript web-scraping cheerio