【问题标题】:How to get element one by one using node.js Cheerio如何使用 node.js Cheerio 逐个获取元素
【发布时间】:2015-12-30 15:27:48
【问题描述】:

我正在使用 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 不是数组,所以不能一一捡起来。我该怎么办?

【问题讨论】:

    标签: javascript node.js cheerio


    【解决方案1】:

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

    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")。它看起来更干净。

    【讨论】:

      猜你喜欢
      • 2014-05-21
      • 2020-05-13
      • 1970-01-01
      • 2021-06-19
      • 2017-02-19
      • 2023-03-05
      • 1970-01-01
      • 2017-09-07
      • 1970-01-01
      相关资源
      最近更新 更多