Многоуровневый JSON

Тема в разделе "Парсинг JSON", создана пользователем krapius, 9 янв 2023.

  1. krapius

    krapius Member Пользователи

    Регистрация:
    2 фев 2020
    Сообщения:
    52
    Добрый день!

    страница:
    Ссылки недоступны для гостей
    возвращает 2 блока информации из JSON

    [​IMG]

    по адресу:
    Ссылки недоступны для гостей

    в каждом блоке 8 разделов

    [​IMG]

    и по 2 строчки таблицы: Отображение факта и План

    интересует вторая строка — План
    вывод в формате ключ-значение или год и соотвествующий ему план

    [​IMG]

    в JSON:

    [​IMG]

    До одной таблицы еще могу добраться и спарсить
    а их там 8 да и вложенность JSON не оставляет шансов вырулить ситуацию,
    Помогите хоть советом, как будет время
     

    Вложения:

    • parsedata.cdp
      Размер файла:
      100 КБ
      Просмотров:
      1
  2. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Здравствуйте.

    Эта реализация функционала по извлечению структуры JSON мне самому не нравится. Похоже, что придется написать удобную функцию для этого.

    Не совсем понятно про формат вывода.

    Если можно, сделайте пример желаемого CSV на основе этой одной ссылки.

    Скрытое содержимое:
    **Скрытое содержимое: доступно при наличии 1 постов.**
    Постараюсь подобрать решение.
     
  3. krapius

    krapius Member Пользователи

    Регистрация:
    2 фев 2020
    Сообщения:
    52
    Не все понятно, наверное, потому что о части вывода писал

    Итоговая же таблица такая:

    [​IMG]
    [​IMG]



    I колонка — наименование вуза, спарсил со страниц отдельным проектом

    [​IMG]

    II колонка — группа пользователей, их 2 вида:

    [​IMG]

    1) Показатели, необходимые для достижения...или коротко — Базовая часть, текст можно взять со страницы, делал так:

    [​IMG]

    2) Показатели, необходимые для достижения п...или коротко — Спецчасть,
    на странице нет такого текста, можно и длинную часть добавить, а там в экселе заменить махом

    на каждую кнопку по 8 таблиц со значениями разбитыми по годам

    !!! Но, не все ссылки содержат обе группы пользователей, (где-то всего одна группа пользователей)
    от того мои циклы летят к чертям,
    так как один блок информации циклом не обходится, нужно 2 и более

    [​IMG]

    таким образом, моя писанина подходит для этого JSON:
    Ссылки недоступны для гостей

    и не подходит для него:
    Ссылки недоступны для гостей

    III колонка — Показатели, тоже дергал отдельным проектом, прикреплю:

    [​IMG]

    IV часть — 10 колонок — вся соль для меня там — это вытащить для них данные из JSON и если предыдущие колонки смогу сформировать сам, то тут кажись без помощи не обойтись

    проект обновил, прикрепил

    докучи прикрепил и ссылки:

    левая колонка — страница
    правая — ссылка на JSON для этой страницы
     

    Вложения:

    Последнее редактирование: 9 янв 2023
  4. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Сейчас не могу комплексно вникнуть в такой проект. Думал, вопрос решится только лишь по разбору JSON.

    Почему вы Api парсите, может лучше веб версию сайта? Без JSON и все в одном проекте.
     
  5. krapius

    krapius Member Пользователи

    Регистрация:
    2 фев 2020
    Сообщения:
    52
    да, может и так проще
    там вроде по клику подтягивается,
    потому и решил через Api
    да и вы всегда в видео советуете так делать, чтобы ресурсов сильно не нагружать
     
  6. krapius

    krapius Member Пользователи

    Регистрация:
    2 фев 2020
    Сообщения:
    52
    Остальное привел в пример
    только для полноты картины
    и самому получится собрать


    там весь затык только в JSON
    и действительно всё бы решилось его разбором
     
    Последнее редактирование: 10 янв 2023
  7. krapius

    krapius Member Пользователи

    Регистрация:
    2 фев 2020
    Сообщения:
    52
    а как можно проверить, сможет ли цикл отработать или нет
    есть ли ему что обходить или там всего один элемент?

    в одном случае у меня есть что обходить, там 2 блока
    [​IMG]

    в другом случае обходить будет нечего и это бы отловить:
    [​IMG]

    я бы в зависимости от того есть ли 2 блока или нет
    соотвественно попробовал бы предложить 2 варианта кода на исполнение
    чтобы парсить тот или этот случай
    так бы перекрыл все варианты

    а то сейчас, на выводе пусто, если цикл не отрабатывает:

    {OUT_TEMPLATE}
    {LIST(*data)}
    {LIST(*elements)}{LIST(*data)}
    {KEY(data>2021)}[CSVCS]{KEY(data>2022)}[CSVCS]{KEY(data>2023)}[CSVCS]
    {/LIST}{/LIST}
    {/LIST}
    {/OUT_TEMPLATE}

    и для этого случая нужно писать другой код, без цикла
     
  8. krapius

    krapius Member Пользователи

    Регистрация:
    2 фев 2020
    Сообщения:
    52
    плюнул я на эту затею, использовать разветвление
    для обхода двойным циклом в одном случае
    и одним в другом
    и чтобы оно работало враз

    в Повторяющихся границах
    поиск-заменой из всего документа отобрал нужные элементы

    [​IMG]




    они хорошо отметились Маркером
    и тогда я их мог собрать в кучу

    [​IMG]



    далее обычными границами внутри повторяющихся прошелся циклом
    взял нужный ключ
    а из него уже вывел все что надо было дернуть из JSON

    там еще заменой удалил первую строчку
    так как мне всегда нужна только вторая

    [​IMG]

    получились красота неимоверная :)

    [​IMG]
     
    Root нравится это.
  9. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Отлично, а то я с утра уже хотел вникать в ваш проект.
     
  10. krapius

    krapius Member Пользователи

    Регистрация:
    2 фев 2020
    Сообщения:
    52
    почти всё готово

    [​IMG]

    остался один столбец
    и только по нему нет информации в JSON

    но по идее каждая ссылка уникальна
    это страница — и тут есть та самая информация:
    Ссылки недоступны для гостей

    а это JSON:
    Ссылки недоступны для гостей

    и у каждой есть свой идентификатор — heo0www7bu
    по которому они отличаются от других страниц

    в другом проекте спарсил заголовки
    и сопоставил им идентификаторы

    [​IMG]

    в основном проекте Парсеру скармливаю ссылки с JSON
    по идее он их помнит
    и там есть тот же Идентификатор

    как теперь из внешнего файла
    с Наименованием и Идентификатором

    взять по идентификатору Наименование
    и влепить в Основном проекте и вывести?

    [​IMG]

    в первом столбце выделил 2 блока
    с Казанским и Кубанским универом

    так они и идут
    где-то 16 строк
    где то 8 строк информации
    на каждый университет

    проект обновил
    так же прикрепил и Наименование с Идентификаторами
    вдруг будет время глянуть

    либо подсказать, откуда копать
     

    Вложения:

    • names+id.csv
      Размер файла:
      27,7 КБ
      Просмотров:
      3
    • parsedata.cdp
      Размер файла:
      41,5 КБ
      Просмотров:
      0
    Последнее редактирование: 11 янв 2023
  11. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    В файл с наименованиями и идентификаторами сохраните нужные данные, например, в виде:
    Затем, в другом проекте (где нужно данные подгрузить из файла) воспользуйтесь такой конструкцией:
    Код:
    [REPLACE(<IDn><CD_GRAN_12!></IDn><NAME>{get}</NAME>|{get})][FILE(C:\Users\Sergey Zaykovskiy\Downloads\names+id (1).csv|1|1000000)][/REPLACE]
    Где <CD_GRAN_12!> - это идентификатор. На месте этой границы паринга может быть любая другая.

    Данные подгружаются с помощью макроса [FILE] и из них берется значение наименования по идентификатору с помощью поиск-замены [REPLACE].
     
  12. krapius

    krapius Member Пользователи

    Регистрация:
    2 фев 2020
    Сообщения:
    52
    Мозгов не хватило как из текущей ссылки выдернуть ID
    присобачил его параметром в конец ссылок

    [​IMG]

    и вроде бы все заиграло нужными красками

    [​IMG]
     
  13. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Вывод значения [PARAM] из ссылки осуществляется макросом шаблона вывода [PARAM].
     
  14. krapius

    krapius Member Пользователи

    Регистрация:
    2 фев 2020
    Сообщения:
    52
    с ним да, не было проблем

    [​IMG]



    отрабатывает как и написано в Справочнике

    [​IMG]
     
  15. krapius

    krapius Member Пользователи

    Регистрация:
    2 фев 2020
    Сообщения:
    52
    другой косяк нашел свой
    я думал заголовки спарсил корректно

    их же дергал с WBApp
    [​IMG]

    но не во всех случаях похоже может дождаться отработку срипта сайта
    и парсятся шаблонные значения по умолчанию
    до подмены нужными данными

    [​IMG]

    что можно сделать в этом случае?
     
  16. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Грамотно настроить ожидание загрузки.

    Можете выслать проект cdp со ссылками, настрою.
     
  17. krapius

    krapius Member Пользователи

    Регистрация:
    2 фев 2020
    Сообщения:
    52
    да я же сам еще тот грамотей
    почти не глядя в монитор накуртил цирфы

    [​IMG]

    и все чётенько скачало
    кроме 11 последних

    [​IMG]

    ну там похоже блок стоит
    за частые попытки назойливо скачать

    позже запущу только этот остаток
    а если забанили меня надого

    то опять вернусь с вопросов и проектом
     
  18. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Ожидание немного не так настраивается.

    Позже постараюсь сделать подробный четкий мануал по этой теме.
     
  19. krapius

    krapius Member Пользователи

    Регистрация:
    2 фев 2020
    Сообщения:
    52
    в этом случае пауза помогла

    [​IMG]

    но и про правильную настройку Ожидания тоже охота услышать

    если только речь не идет о создании файла проекта ctrl + w и использования макросов оттуда
    типа [WAITFORMAINFRAMELOAD] или [WAIT]?

    там вроде нужна версия Ultimate
    я, кстати, ее и хотел было сразу купить на старте
    вы как то отговорили, типа чаще берут на меньше срок
    или что-то такое, я и не стал тогда

    а сейчас раз дошёл почти до конца без функционала Ultimate
    то и хотелось проскочить на легке
    вроде удалось,
    но и приобрести вообще не проблема
     

Поделиться этой страницей