Cheerio select或者不select一些元素

Cheerio selector doesn't select some elements

我正在尝试构建一个模块,使用 request-promise 和 cheerio 在官方 NBA 得分页面(例如 https://stats.nba.com/game/0021800083)上进行一些基本的抓取。我写了下面的测试代码:

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;

当我检查测试网页时,有多个带有 class="player" 标签的 td 实例,但由于某些原因 select 使用 cheerio 对它们进行处理无效。

但是 cheerio 成功地 select 一些元素,包括 ascriptdiv 标签。

不胜感激!

对于使用 AngularJS 构建的站点,使用请求承诺之类的抓取工具无效。正如您可能期望的那样,您的响应不包含呈现的 HTML。您可以通过控制台记录响应来确认。为了正确抓取该网站,您可以使用 PhantomJS、Selenium Webdriver 等。

一种更简单的方法是识别提供您所需数据的 AJAX 调用并将其抓取。为此,请转到该站点并在开发人员工具中打开“网络”选项卡。查看请求列表并确定哪个请求包含您要查找的数据。

假设您正在寻找表格中的球员统计数据,我相信您正在寻找的是“0021800083_gamedetail.json”

进一步阅读: Can you scrape a Angular JS website Scraping Data from AngularJS loaded page

祝你好运!