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

标签 javascript node.js cheerio

我正在使用 Cheerio、Node.js 上的 Request 制作网络抓取工具。我用过一些爬虫,但我不知道 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.A") 替换 $('a[class=A]') 表达式。它看起来更干净。

关于javascript - 如何使用 node.js Cheerio 一个一个地获取元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34532332/

相关文章:

node.js - 有没有办法定义特定于环境的 Mongoose 中间件?

node.js - 让npmremove模块从package.json中删除,即反射(reflect)package.json的状态

尝试启动 server.js 时出现 node.js 错误

javascript - 如何使用 Node.js 解析 HTML/XML 文档?

javascript - <div> 上的默认 View ?没有点击

javascript - 我的土地面积计算器应用程序的逻辑

node.js - 如何使用nodejs爬取javascript(vuejs、reactjs)网站

javascript - 我可以向 Cheerio 选择器添加变量吗?

javascript - 使用 simplecartjs 在结帐前添加功能

javascript - 在 PHP 的 JQuery Ajax 调用中解析 json