我是cheerio的新手,想要抓住特定表中的所有团队名称并将数据作为json返回,例如
{
name: "Manchester City"
}
到目前为止我在下面创建了一个假设是api返回数据,但是我似乎无法访问任何特定的元素?我一直得到以下回复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);
});
});
答案 0 :(得分:1)
首先,您使用的是不正确的cheerio功能。您需要.map
而不是.each
。 Each
只是根据迭代器函数中的代码迭代而不返回任何有用的东西,而map
将迭代器函数返回的所有内容都收集到一个数组中。所以切换到.map
,你应该得到一个字符串数组(假设你的选择器和HTML解析是正确的)。你将["Name 1", "Name 2", "Name 3"]
。
然后你需要将它转换为你想要的格式,这是一个对象数组,所以你需要在这里再次调用.map
。
res.json(classes.map(function (name) {return {name: name}}));