如何使用 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")
。它看起来更干净。
我正在使用 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")
。它看起来更干净。