如何使用 node.js Cheerio 一个一个地获取元素

How to get element one by one using node.js Cheerio

我正在使用 Cheerio 制作网络抓取工具,请求 Node.js。我用过一些爬虫,但我不知道 jQuery 熟悉的爬虫,Cheerio。无论如何,让我们看看问题。

html

<li><a title="FR" class="A">176.31.239.33:8133</a></li>
<li><a title="FR" class="B">87.98.218.86:3128</a></li>
<li><a title="CN" class="A">183.62.60.100:80</a></li>
<li><a title="CN" class="A">183.131.152.227:80</a></li>
<li><a title="CN" class="A">183.238.133.43:80</a></li>

我想选取具有 class="A" 的元素,然后是其文本 (183.62.60.100:80)。然后将制作数组。

[ 
{ 'title' : 'FR', 'IP' : '176.31.239.33:8133' }, 
{ 'title' : 'CN', 'IP' : '183.62.60.100:80' },
...
]

但是我卡住了。我试过了...

var $ = cheerio.load(html);
var arr = $('a[class=A]').text();
console.log(arr) 

// result is 
// 176.31.239.33:8133183.62.60.100:80183.131.152.227.80

// if I print console.log(arr[0]), the result is just 1

reuslt不是数组,没办法一一摘出来。我该怎么做?

您应该遍历 jquery/cherrio 选择器返回的集合,并获取每个元素的 title 属性及其内部文本。尝试:

var $ = cheerio.load(html);
var arr = $('a[class=A]');   
var array = [];
arr.each(function() {
    array.push({
        title: $(this).attr('title'),
        IP: $(this).text()
    });
});

您也可以尝试将 $('a[class=A]') 表达式替换为 $("a.A")。它看起来更干净。