我试图用cheerio破坏一个足球排名表,它是成功的,但问题是第一行和第一列是失踪和表数据是不完整的.这是我的代码如下:
'
const request = require("request-promise");
const express = require('express')
const cheerio = require("cheerio");
const app = express()
const PORT = 8888;
app.get('/td', async (req, res) => {
const results = [];
try {
const result = await request.get("https://footystats.org/algeria/ligue-1");
const $ = cheerio.load(result);
$("#league-tables-wrapper > div > div.table-wrapper > table > tbody > tr").each((index, element) => {
if (index === 0) return true;
const tds = $(element).find("td");
const rank = $(tds[0]).text();
const team = $(tds[2]).text();
const points = $(tds[10]).text();
const tableRow = { rank, team, points };
results.push({
rank,
team,
points
});
});
} catch (err) {
console.error(err);
}
res.json(results)
});
app.listen(PORT, () => console.log(`surver running on PORT ${PORT}`))
'假设我得到了表中第一队的排名、队和分,但结果是从表中第二行的排名、队开始。这是下面结果的一个例子:
'
rank "2"
team "CS Constantine"
points "29"
1
rank "3"
team "MC Alger"
points "25"
2
rank "4"
team "JS Saoura"
points "23"
3
rank "5"
team "ES Sétif"
points "22"
4
rank "6"
team "USM Khenchela"
points "20"
5
rank "7"
team "USM Alger"
points "19"
'正如您所注意到的,它开始从第二个团队(行)中抓取数据。
我试过手动获取第一组,方法是:
第一个月
并将其推送到结果中:results.push({ first_rank, rank, team points
)}
但它返回一个空响应,并且完全混淆了:first "" rank "2" team "CS Constantine" points "29"
有谁能告诉我出了什么问题吗谢谢!
1条答案
按热度按时间olqngx591#
选择器策略
只要
tag
和它的类名就足够了。$(选择器)是找到的元素数组
示例:$(头衔)、$(级别)和$(分数)
循环使用带索引的标题数组
$(标题).每个((索引,元素)=〉{...}
在循环内部,如何通过
index
访问其他数组示例:$(rank)[索引]
访问文本
它是排名的第一个子示例
Team
名称为红色-参见图像。Rank
为蓝色Points
为绿色此代码有效
结果
URL -访问Express获得排名
对于调试日志记录结果