CheerioJS,使用相同的类名循环<ul>

Sob*_*lic 5 node.js scrape cheerio

我试图遍历每个<ul>并获得每个的价值<li>.问题是,它只需要第一个<ul>并跳过其余部分.

HTML

<div id="browse-results">
    <ul class="tips cf">
        <li>tip11</li>
        <li>tip12</li>
        <li>tip13</li>
    </ul>
    <ul class="tips cf">
        <li>tip21</li>        
        <li>tip22</li>        
        <li>tip23</li>        
    </ul>
    <ul class="tips cf">
        <li>tip31</li>        
        <li>tip32</li>        
        <li>tip33</li>        
    </ul>
    <ul class="tips cf">
        <li>tip41</li>        
        <li>tip42</li>        
        <li>tip43</li>        
    </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

Cheerio解析

$('#browse-results').find('.tips.cf').each(function(i, elm) {
    console.log($(this).text()) // for testing do text() 
});

$('#browse-results').children().find('.tips').each(function(i, elm) {
    console.log($(this).text())
});
I've tried many more
Run Code Online (Sandbox Code Playgroud)

输出只是第一个的值<ul>.

tip11
tip12
tip13
Run Code Online (Sandbox Code Playgroud)

请注意,这只是一个片段示例,其结构与我正在尝试解析的内容相同.

我花了将近2个小时,我找不到办法.

Tim*_*ple 8

试试这个:

var cheerio = require('cheerio');

var html = '<div id="browse-results"> \
    <ul class="tips cf"> \
        <li>tip11</li> \
        <li>tip12</li> \
        <li>tip13</li> \
    </ul> \
    <ul class="tips cf"> \
        <li>tip21</li> \
        <li>tip22</li> \
        <li>tip23</li> \
    </ul> \
    <ul class="tips cf"> \
        <li>tip31</li> \
        <li>tip32</li> \
        <li>tip33</li> \
    </ul> \
    <ul class="tips cf"> \
        <li>tip41</li> \
        <li>tip42</li> \
        <li>tip43</li> \
    </ul> \
</div>';

var $ = cheerio.load(html);

$('#browse-results li').each(function(i, elm) {
    console.log($(this).text()) // for testing do text() 
});
Run Code Online (Sandbox Code Playgroud)

这将选择所有的li元素#browse-results.

  • 谢谢!显然,即使我的代码也能工作。但是我试图为公司自己抓取的页面没有显示整个列表。而我对此一无所知!花了3个小时在这上面。今天学到了一课:) (2认同)
  • 我的解决方案与此类似。但是我不得不用`console.log($(elm).text())代替“ console.log($(this).text())``。 (2认同)