这是在浏览器中工作但是当我试图用cheerio和node.js做同样的事情时它不起作用:
var request = require('request');
var cheerio = require('cheerio');
var url = 'https://www.google.fr/search?ei=apX6WdzaIMzWUabjqvAF&q=ok&oq=ok&gs_l=psy-ab.3..0i67k1l4j0j0i67k1l2j0i131k1j0j0i67k1.2633.3962.0.4021.3.3.0.0.0.0.58.169.3.3.0....0...1.1.64.psy-ab..0.3.169....0.524Rrv-4zlU'
request(url, function (error, response, html) {
if (!error && response.statusCode == 200) {
var $ = cheerio.load(html);
console.log($('.r')[0].innerText);
}
});
我从未使用过cheerio,这段代码在终端给我未定义的消息,为什么?
答案 0 :(得分:1)
根据cheerio doc,您似乎可以使用:
$('.r').first().text()
或
$('.r').eq(0).text()
我不知道cheerio是否支持像jQuery那样的直接数组访问,因为这些不是真正的DOM对象(但是由Cheerio创建的伪对象),我看不到对.innerText
的任何支持Cheerio doc,事实上,Github搜索“innerText”也没有得到任何命中。看起来您可以在Cheerio集合对象上使用.html()
或.text()
。
如果你得到一个特定的节点对象,就像你可能试图用$('.r')[0]
那样,那么该节点对象支持的属性(与cheerio集合对象不同)are listed here和如下:
tagName
parentNode
previousSibling
nextSibling
nodeValue
firstChild
childNodes
lastChild
因此,如果您获得实际的节点对象,则可以使用:
$('.r').get(0).nodeValue
而且,这将获得节点的原始内容。我希望早期的.text()
示例可能是一种更安全,更简单的方法来获得结果。