Cheerio给出奇怪的结果

时间:2019-04-24 17:55:08

标签: node.js cheerio

这是一个简单的cheerio应用程序。标签有一个名为product-link的类,我想访问它的href,但是当我在控制台上登录时,我没有得到任何HTML。任何人都可以了解正在发生的事情以及如何从中获取我想要的数据吗?

let holder = $('.product-link');
console.log(holder);

结果->

initialize {
  options:
   { withDomLvl1: true,
     normalizeWhitespace: false,
     xml: false,
     decodeEntities: true },    
  _root:
   initialize {
     '0':
      { type: 'root',
        name: 'root',
        namespace: 'http://www.w3.org/1999/xhtml',
        attribs: [Object: null prototype] {},
        'x-attribsNamespace': [Object: null prototype] {},
        'x-attribsPrefix': [Object: null prototype] {},
        children: [Array],
        parent: null,
        prev: null,
        next: null },
     options:
      { withDomLvl1: true,
        normalizeWhitespace: false,
        xml: false,
        decodeEntities: true },
     length: 1,
     _root: [Circular] },
  length: 0,
  prevObject:
   initialize {
     '0':
      { type: 'root',
        name: 'root',
        namespace: 'http://www.w3.org/1999/xhtml',
        attribs: [Object: null prototype] {},
        'x-attribsNamespace': [Object: null prototype] {},
        'x-attribsPrefix': [Object: null prototype] {},
        children: [Array],
        parent: null,
        prev: null,
        next: null },
     options:
      { withDomLvl1: true,
        normalizeWhitespace: false,
        xml: false,
        decodeEntities: true },
     length: 1,
     _root: [Circular] } }

4 个答案:

答案 0 :(得分:0)

cheerio具有类似于jQuery的API。因此,当您调用此函数$('selector')时,cheerio将返回具有许多方法和字段的对象,以获取属性或查找子节点等。这就是为什么它不返回html的原因。但是,如果要查看带下划线的HTML,则可以使用$('selector').html()

如果要访问属性,可以使用attr()方法。

所以现在您的代码将是

const holder = $('.product-link');
const href = holder.attr('href');

您可以参考以下文档

https://github.com/cheeriojs/cheerio

https://api.jquery.com/(由于cheerio的设计类似于jQuery)

答案 1 :(得分:0)

对于单个链接:

var href = $('.product-link').attr('href');

如果要处理多个标签,则可以简单地循环它们:

$('.product-link').each( (index, singleLink) => {
   var singleHref = $(singleLink).attr('href');
   console.log(singleHref);
});

答案 2 :(得分:0)

对于仍然面临同样问题的任何人,如果您在使用cheerio时没有得到正确的HTML,您可以使用Puppeteer来模拟浏览器,打开网页直到所有内容都加载完毕,然后使用Cheerio从puppeteer中解析HTML。< /p>

答案 3 :(得分:-1)

嘿,我在请求模块的回调函数中解决了上述问题。将结果体传递给cheerio,例如:

request.get(URL, (err, result) => {
  const $ = await cheerio.load(result.body);
});

我犯了这样的错误:

const $ = await cheerio.load(result); // dont use this line