Не отображаются символы текста, которые были получены с помощью скрапинга с cheerio (Node JS)
Все так, как и в заголовке написано. Выходят какие то кракозябры типо '�'. Как исправить?
app.get('/rplTopScores', (req, res) => {
res.send(rplTopScores);
});
await axios('https://www.sport-express.ru/football/L/russia/premier/2022-2023/statistics/bombardiers/') // rplTopScores
.then(response => response.data)
.then(response => {
const $ = cheerio.load(response);
$('table.se19-table-statistics tr').each((i, element) => {
rplTopScores.push({
player: $(element).find('.se19-table-statistics__td--name a').text()
});
console.log($(element).find('.se19-table-statistics__td--name a').text());
});
})
.catch(err => console.log(err));
Ответы (1 шт):
Автор решения: nörbörnën
→ Ссылка
import * as cheerio from 'cheerio';
import iconv from 'iconv-lite';
const res = await fetch(
'https://www.sport-express.ru/football/L/russia/premier/2022-2023/statistics/bombardiers/'
);
const charset = (res.headers.get('content-type') ?? '')
.split(/\s*;\s*/).find(
(/** @type {string} */ x) => x.startsWith('charset')
)?.replace(/charset=/, '');
const buf = await res.arrayBuffer();
const html = iconv.decode(
Buffer.from(buf),
charset || 'windows-1251'
);
const $ = cheerio.load(html);
$('table.se19-table-statistics tr').each((i, element) => {
const text = $(element).find('.se19-table-statistics__td--name a').text();
console.log(text);
});
$ node 52863124.js
Квинси Промес
Эдуард Сперцян
Кристиан Нобоа
Филипе Силва Малком
Владимир Сычевой
Тимур Сулейманов
Маркус Вендел
Николай Комличенко
Хорхе Карраскаль
Хесус Мануэль Медина
Федор Чалов
Дмитрий Полоз
...
node.js v18.7.0
c axios подобное можно провернуть так:
axios.get(
url,
{
responseType: 'arraybuffer',
responseEncoding: 'binary'
}
)
