Cheerio选择器未选择某些元素

时间:2018-10-29 21:41:53

标签: javascript node.js request cheerio request-promise

我正在尝试构建一个模块,该模块使用请求承诺和欢呼声在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;

当我检查测试网页时,有多个带有td的{​​{1}}标签的实例,但是出于某种原因,用cheerio选择它们是行不通的。

但是cheerio确实成功选择了一些元素,包括class="player"ascript标签。

我们将不胜感激!

1 个答案:

答案 0 :(得分:0)

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

一种更简单的方法是识别正在提供您所需要的数据的AJAX调用,然后对其进行刮取。为此,请转到该站点,然后在开发人员工具中打开“网络”选项卡。查看请求列表,然后确定要处理的数据是哪一个。

假设您关注表中的玩家数据,我相信您要寻找的是“ 0021800083_gamedetail.json”

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

祝你好运!

相关问题