代码在控制台中工作但不在终端中工作

时间:2017-03-02 08:53:19

标签: javascript node.js cheerio

我会尝试尽可能具体,因为我是初学者,这是我在stackoverflow上的第一个问题:)!

我正在尝试使用cheerio和nodeJs在html页面中提取某些数据属性的值,这是我的代码:

var request = require('request');
var cheerio = require('cheerio');
var url = 'http://www.example.com/example';
    request(url, function(err, resp, body){
    var dataList = $(".example").map(function() {
    return $(this).data("example");
 }).get();

console.log(dataList.join("|"));
});

这是我正在处理的HTML:

<span class="item-link"><span class="example" data-mel="example">
                          <img src="/#" alt="" />
            </span></span>

所以我遇到的问题是当我尝试在终端中运行我的代码时出现此错误:error

但是当我在控制台chrome中运行这个部分时:

  var dataList = $(".mel").map(function() {
  return $(this).data("mel");
  }).get();

  console.log(dataList.join("|"));

它有效!!! :(但我想在我的终端运行它,所以我可以迭代!

所以我设法使用以下代码在终端中使用它:

var request = require("request"),
cheerio = require("cheerio"),
url = "http://www.example.com/example";
var mail2 = [];

request(url, function (error, response, body) {
  if (!error) {
   var $ = cheerio.load(body);
    $('.item-link').each(function(i, elem){
     mail2[i] = $(".example").data("example");
    });
  console.log(mail2.join(', '));

但后来我一次又一次得到同样的元素,并没有提取整个页面。

抱歉这个大乱,让我知道我是否可以更具体! 请原谅我的英文C:!

谢谢:-)

1 个答案:

答案 0 :(得分:1)

尝试将代码切换为:

var request = require("request"),
cheerio = require("cheerio"),
url = "http://www.example.com/example";
var mail2 = [];

request(url, function (error, response, body) {
  if (!error) {
   var $ = cheerio.load(body);
    $('.item-link').each(function(i, elem){
      mail2[i] = $(elem).find(".example").data("example");
    });
  }
});
console.log(mail2.join(', '));