使用 cheerio nodejs 抓取 table 数据
Scraping table data using cheerio nodejs
我是 cheerio 的新手,想抓取特定 table 和 return 数据中的所有团队名称,如 json 例如
{
name: "Manchester City"
}
到目前为止,我已经在下面创建了一个假设为 api return 的数据,但是我似乎无法访问任何特定元素?我不断收到以下回复 TypeError: Converting circular structure to JSON
代码
app.get('/api/standings', function(req, res, next){
var base = "http://www.skysports.com/football/competitions/premier-league/tables";
var age = 2015;
request.get(`${base}`, function(err, response, body) {
var $ = cheerio.load(body);
//get standings
var classes = $('standing-table__table tbody tr').each(function() {
var d = $(this);
var td = d.children('td.standing-table__cell standing-table__cell--name');
return td.eq(0).text();
});
res.json(classes);
});
});
首先,您使用的 cheerio 功能不正确。您需要 .map
而不是 .each
。 Each
只是迭代而不返回任何基于迭代器函数中代码的有用信息,而 map
将迭代器函数返回的所有内容收集到一个数组中。所以切换到 .map
,你应该得到一个字符串数组(假设你的选择器和 HTML 解析是正确的)。你将有 ["Name 1", "Name 2", "Name 3"]
.
然后您需要将其转换为您想要的格式,这是一个对象数组,因此您需要在此处再次调用 .map
。
res.json(classes.map(function (name) {return {name: name}}));
我是 cheerio 的新手,想抓取特定 table 和 return 数据中的所有团队名称,如 json 例如
{
name: "Manchester City"
}
到目前为止,我已经在下面创建了一个假设为 api return 的数据,但是我似乎无法访问任何特定元素?我不断收到以下回复 TypeError: Converting circular structure to JSON
代码
app.get('/api/standings', function(req, res, next){
var base = "http://www.skysports.com/football/competitions/premier-league/tables";
var age = 2015;
request.get(`${base}`, function(err, response, body) {
var $ = cheerio.load(body);
//get standings
var classes = $('standing-table__table tbody tr').each(function() {
var d = $(this);
var td = d.children('td.standing-table__cell standing-table__cell--name');
return td.eq(0).text();
});
res.json(classes);
});
});
首先,您使用的 cheerio 功能不正确。您需要 .map
而不是 .each
。 Each
只是迭代而不返回任何基于迭代器函数中代码的有用信息,而 map
将迭代器函数返回的所有内容收集到一个数组中。所以切换到 .map
,你应该得到一个字符串数组(假设你的选择器和 HTML 解析是正确的)。你将有 ["Name 1", "Name 2", "Name 3"]
.
然后您需要将其转换为您想要的格式,这是一个对象数组,因此您需要在此处再次调用 .map
。
res.json(classes.map(function (name) {return {name: name}}));