Ошибка типа: $ .find не является функцией - PullRequest
1 голос
/ 13 марта 2019

Я извлекаю данные со страницы, но получаю эту ошибку

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);
});

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Нет функции $.find(), так же как ее нет в jQuery.Существует .find() метод для объектов jQuery, но это не то, что представляет $.

trm = $(".item-row[data-item='TRM']").find(".item-value > span");

ищет разметку, загруженную для элементов "item-row", а затем изкаждый из них ищет элементы <span> внутри элементов "item-value".

Как и в "реальном" 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());
0 голосов
/ 13 марта 2019

Играя с кодом, похоже, что выражение var $ = cheerio.load( data ) назначает переменную $ экземпляру cheerio с загруженным документом HTML. Затем вы можете пройти через дом, как если бы вы использовали jQuery.

Изменение строки 20 на

$("body").find(".item-row[data-item='TRM']").find(".item-value > span");

Будет работать, потому что мы выбираем body и затем вызываем метод find для возвращаемого значения исходного запроса вместо самого экземпляра cheerio.

...