LINUX.ORG.RU

Первые попытки парсинга HTML со встроенным JSON из JavaScript: что пошло не так?

 


0

1

Страница https://lyrics.lyricfind.com/lyrics/procol-harum-a-whiter-shade-of-pale включает в себя JSON в теге

<script id="__NEXT_DATA__" type="application/json">

Структура JSON такая:

{
  "props": {
    "pageProps": {
      "songData": {
        "response": {
          "code": 101,
          "description": "SUCCESS: LICENSE, LYRICS"
        },
        "track": {
          "lfid": "002-881192",
          "language": "en",
          "rovi": "MT0000108280",
          "gracenote": "GN0K05NH2AB4K0M",
          "apple": 1440671809,
          "deezer": 18167615,
          "spotify": "03x2itbo74uxfsrokh27ff",
          "isrcs": [
            "ES5621904215"

          ],
          "instrumental": false,
          "viewable": true,
          "has_lrc": false,
          "has_contentfilter": true,
          "has_emotion": true,
          "has_sentiment": true,
          "title": "A Whiter Shade of Pale",
          "artists": [
            {
              "name": "Procol Harum",
              "lfid": "lf:22747",
              "slug": "procol-harum",
              "is_primary": true
            }
          ],
          "artist": {
            "name": "Procol Harum"
          },
          "last_update": "2023-01-01 00:00:00",
          "lyrics": "We skipped the light fandango...

Из консоли Chrome пробую извлечь lyrics:

// извлечь JSON из HTML-DOM
let rawJSON = document.getElementById("__NEXT_DATA__").textContent;
console.log(rawJSON); // получается успешно

// получить многомерный массив с JSON-деревом
let objJSON = JSON.parse(rawJSON);
console.log(objJSON); // получается успешно

// получить текст из элемента
let lyrics = objJSON.props.pageProps.songData.track.lyrics;
console.log(lyrics);

На последнем шаге получаю ошибку:

ncaught TypeError: Cannot read properties of undefined (reading 'track') at <anonymous>:5:47

Что здесь не так?

★★★★★

Я вот бухой, но глянул исходную страницу и то, что ты привел в примере непверно. Ты пропустил «response» -

objJSON.props.pageProps.songData.response.track.lyrics;

Но может я тоже промахнулся. Только такие вопросы я не понимаю зачем задавать.

pi11 ★★★★★
()