我正在尝试构建一个模块,该模块使用请求承诺和欢呼声在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"
,a
和script
标签。
我们将不胜感激!
答案 0 :(得分:0)
使用像请求承诺这样的抓取工具不适用于使用AngularJS构建的网站。正如您所期望的那样,您的响应不包含呈现的HTML。您可以通过控制台记录响应来确认。为了正确抓取该网站,您可以使用PhantomJS,Selenium Webdriver等。
一种更简单的方法是识别正在提供您所需要的数据的AJAX调用,然后对其进行刮取。为此,请转到该站点,然后在开发人员工具中打开“网络”选项卡。查看请求列表,然后确定要处理的数据是哪一个。
假设您关注表中的玩家数据,我相信您要寻找的是“ 0021800083_gamedetail.json”
进一步阅读: Can you scrape a Angular JS website Scraping Data from AngularJS loaded page
祝你好运!