Javascript 使用ChereIO和用于web抓取的url执行document.getElementsByCassName()的等效操作
这在浏览器中正常工作,但当我尝试对cheerio和node.js执行相同操作时,它不起作用:Javascript 使用ChereIO和用于web抓取的url执行document.getElementsByCassName()的等效操作,javascript,jquery,node.js,url,cheerio,Javascript,Jquery,Node.js,Url,Cheerio,这在浏览器中正常工作,但当我尝试对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..0i67k1l4j0j0i67k1l2j0i131k1j0j0i6
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,这段代码在终端中给了我未定义的消息,为什么 根据,看起来您可以使用:
$('.r').first().text()
或
我不知道cheerio是否像jQuery一样支持直接数组访问,而且由于这些不是真正的DOM对象(而是cheerio创建的伪对象),我在cheerio文档中看不到对.innerText
的任何支持,事实上,Github搜索“innerText”也不会得到任何点击。看起来您可以在Cheerio集合对象上使用.html()
或.text()
如果您获得了一个特定的节点对象,就像您可能一直试图使用$('.r')[0]
,则该节点对象上支持的属性(不同于cheerio集合对象)如下所示:
tagName
parentNode
previousSibling
nextSibling
nodeValue
firstChild
childNodes
lastChild
因此,如果您得到实际的节点对象,您可能会使用:
$('.r').get(0).nodeValue
这将获得节点的原始内容。我希望前面的
.text()
示例可能是更安全、更容易获得结果的方法。为什么不使用$('.r').text()
?您确认了html
的值是预期值吗?当我使用.text()时,表示我:$(…)[0]。文本不是函数,是的,html的值是预期值
$('.r').get(0).nodeValue