【问题标题】:Why is this Cheerio attribute selector not working?为什么这个 Cheerio 属性选择器不起作用?
【发布时间】:2017-11-11 09:26:55
【问题描述】:

我想使用以下通常在 jQuery 中找到的选择器来创建一个适用于其子级的函数:

var useroverviewHook = $("div[data-pnref='overview'] *[data-overviewsection]");   

但是,它在 Cheerio 中不起作用。 Nodejs 控制台正在报告

console.log($(useroverviewHook).length) is 0

即使在浏览器中测试时,该值不为0,但存在多个元素。

首先我认为内容是动态的,但如果我输出

res.writeHead(200, {'Content-Type': 'text/plain'}); res.write(html);

数据概览部分在那里。但cheerio 说不是。

【问题讨论】:

标签: javascript jquery node.js cheerio


【解决方案1】:

首先,你不需要使用$() twise

var useroverviewHook = $("div[data-pnref='overview'] *[data-overviewsection]");
console.log(useroverviewHook.length)

而且你可以简化这个选择器(去掉*):

div[data-pnref='overview'] [data-overviewsection]

检查一下,也许你在类型选择器名称和属性时犯了一些错误,因为你的语法很好。

另外,有时浏览器会修改 HTML,如果当我遇到类似问题时它被破坏了,我会将响应保存到文件中并再次检查响应 html。

【讨论】:

  • 它不工作。我将响应放在 res.write(response.body) 中。我在那里使用了 jquery 并且语法有效。它不适用于cheerio。长度为0
  • 我想我有同样的问题 - 你需要在数组 $('selector').toArray(); 中转换 $() 选择,我也认为它是一个数组)
  • 当我运行 console.log($('div[data-pnref="overview"] [data-overviewsection]')) 我得到初始化 { options: { withDomLvl1: true, normalizeWhitespace: false , xmlMode: false, decodeEntities: true }, _root: 初始化 { '0': { type: 'root',
  • 获取您尝试抓取的链接
猜你喜欢
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-31
相关资源
最近更新 更多