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 一些元素,包括 a
、script
和 div
标签。
不胜感激!
对于使用 AngularJS 构建的站点,使用请求承诺之类的抓取工具无效。正如您可能期望的那样,您的响应不包含呈现的 HTML。您可以通过控制台记录响应来确认。为了正确抓取该网站,您可以使用 PhantomJS、Selenium Webdriver 等。
一种更简单的方法是识别提供您所需数据的 AJAX 调用并将其抓取。为此,请转到该站点并在开发人员工具中打开“网络”选项卡。查看请求列表并确定哪个请求包含您要查找的数据。
假设您正在寻找表格中的球员统计数据,我相信您正在寻找的是“0021800083_gamedetail.json”
进一步阅读:
Can you scrape a Angular JS website
Scraping Data from AngularJS loaded page
祝你好运!
我正在尝试构建一个模块,使用 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 一些元素,包括 a
、script
和 div
标签。
不胜感激!
对于使用 AngularJS 构建的站点,使用请求承诺之类的抓取工具无效。正如您可能期望的那样,您的响应不包含呈现的 HTML。您可以通过控制台记录响应来确认。为了正确抓取该网站,您可以使用 PhantomJS、Selenium Webdriver 等。
一种更简单的方法是识别提供您所需数据的 AJAX 调用并将其抓取。为此,请转到该站点并在开发人员工具中打开“网络”选项卡。查看请求列表并确定哪个请求包含您要查找的数据。
假设您正在寻找表格中的球员统计数据,我相信您正在寻找的是“0021800083_gamedetail.json”
进一步阅读: Can you scrape a Angular JS website Scraping Data from AngularJS loaded page
祝你好运!