Селектор Cheerio не выделяет некоторые элементы - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь создать модуль, который выполняет некоторые базовые расчеты на официальной странице оценки NBA (например, https://stats.nba.com/game/0021800083), используя request-обещание и cheerio. Я написал следующий тестовый код:

const rp = require("request-promise");
const co = require("cheerio");

// the object to be exported
var stats = {};

const test = (gameId) => {
  rp(`http://stats.nba.com/game/${gameId}`)
    .then(response => {
      const $ = co.load(response);

      $('td.player').each((i, element) => {
        console.log(element);
      });

  });
};

// TESTING
test("0021800083");

module.exports = stats;

Когда я проверяю тестовую веб-страницу, есть несколько экземпляров td тегов с class="player", но по какой-то причине их выбор с помощью cheerio не работает.

Но cheerio успешно выбирает некоторые элементы, включая теги a, script и div.

Помощь будет оценена!

1 Ответ

0 голосов
/ 30 октября 2018

Использование скребка, подобного запросу-обещанию, не будет работать для сайта, созданного с помощью AngularJS. Ваш ответ не состоит из визуализированного HTML, как вы, вероятно, ожидаете. Вы можете подтвердить консоль регистрации ответа. Чтобы правильно почистить этот сайт, вы можете использовать PhantomJS, Selenium Webdriver и т. П.

Более простой подход состоит в том, чтобы определить вызов AJAX, который предоставляет данные, которые вам нужны, и очистить их. Для этого перейдите на сайт и в инструментах разработчика откройте вкладку Сеть. Посмотрите на список запросов и определите, какой из них содержит данные, которые вы ищете.

Предполагая, что вы ищете статистику игроков в таблицах, я думаю, что вы ищете "0021800083_gamedetail.json"

Дальнейшее чтение: Можете ли вы почистить сайт Angular JS Очистка данных с загруженной страницы AngularJS

Удачи!

...