@qbr-code

Как спарсить динамический контент?

Добрый день!

Пишу на NodeJs веб скраппер для страницы https://zachtronics.bandcamp.com/album/shenzhen-i-...
Из подключенных модулей использую request и cheerio.
Моя задача получить ссылку, которая находится в одном из нескольких тегов скрипт (так выглядит сама ссылка: https://t4.bcbits.com/stream/b60bed46407ad20cf804c...
Проблема:
request вовзращает только html, а мне нужно то, что лежит в теге скрипт, то есть динамический контент. Я так понимаю, что единственным выходом будет использование webdriver, puppeteer, или headless chrome? Но это ресурсоемко, запускать целый браузер, чтобы только добраться до тега скрипт и взять оттуда ссылку. Нет других способов?
  • Вопрос задан
  • 484 просмотра
Решения вопроса 1
@DanKud
Ничего там динамически не подключается. Весь контент страницы, в том числе нужные вам скрипты, вы получаете сразу же при загрузке. cheerio вам тут не нужен даже, да и не поможет.

Вот пример как можно получить нужное вам значение:
request('https://zachtronics.bandcamp.com/album/shenzhen-i-o-ost', (error, response, body) => {
	const json = JSON.parse(body.match(/trackinfo:.*(\[.*?\])/)[1]);
	const mp3 = json[0]['file']['mp3-128'];
	console.log(mp3);
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
hzzzzl
@hzzzzl
а request точно не вернет весь html файл страницы со скриптами?

если я правильно понимаю, то интересует массив trackinfo: [...] из главной страницы, может выйдет его без cheerio выцепить регулярным выражением из request.get('bandcamp.com/...'), ну и потом просто распарсить как обычную строку через JSON.parse

UPD
ну и кстати получается, ща регулярку доковыряю и тоже напишу свой граббер бандкампа

request('https://zachtronics.bandcamp.com/album/shenzhen-i-o-ost', function (error, response, body) {
  res.send(body.match(/(?<=trackinfo:)(.*)(?=,)/gi))
  // кривая регулярка, выцепляет не всё что надо
});
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы