我正在从页面提取数据,但是出现此错误
TypeError:$ .find不是函数`
我已经安装了cheerio
。当我输入trm = $.find(".item-row[data-item='TRM']").find(".item-value > span");
时,错误就出来了,我得到了数据,但这个错误就出来了。
代码:
const express = require("express");
const app = express();
const https = require('https');
const cheerio = require('cheerio');
app.get('/', function(req, res) {
res.send('express test');
});
https.get('https://widgetsdataifx.blob.core.windows.net/semana/semanaindicators', (resp) => {
let data = '';
resp.on('data', (chunk) => {
data += chunk;
});
resp.on('end', () => {
var $ = cheerio.load(data);
trm = $.find(".item-row[data-item='TRM']").find(".item-value > span");
});
}).on("error", (err) => {
console.log("Error: " + err.message);
});
答案 0 :(得分:1)
没有$.find()
函数,就像jQuery中没有函数一样。 jQuery对象上有一个.find()
方法,但这不是$
所代表的。
trm = $(".item-row[data-item='TRM']").find(".item-value > span");
搜索为“ item-row”元素加载的标记,然后从每个元素中搜索“ item-value”元素内的<span>
个元素。
与“真实” jQuery中一样,$
对象是一个函数。您可以对其进行函数调用,并传递希望Cheerio在已加载的HTML标记中找到的选择器。
edit -这是一个有效的测试。如果您npm install cheerio
,可以使用Node:
var cheerio = require("cheerio");
var $ = cheerio.load(`<body>
<div class=item-row data-item=TRM>
<div class=item-value>
<span>THIS IS THE CONTENT</span>
</div>
</div>
</body>`);
var span = $(".item-row[data-item='TRM']").find(".item-value > span");
console.log(span.text());
答案 1 :(得分:0)
在播放代码时,看起来var $ = cheerio.load( data )
表达式将$
变量分配给已加载HTML文档的cheerio实例。然后,您可以像使用jQuery一样遍历dom。
将第20行更改为
$("body").find(".item-row[data-item='TRM']").find(".item-value > span");
之所以会起作用,是因为我们正在选择body
,然后在原始查询的返回值而不是cheerio本身的实例上调用find
方法。