️️✨Как найти "Золотую середину". Эксперимент✨

Nord

Client
Регистрация
22.03.2012
Сообщения
2 406
Благодарностей
1 473
Баллы
113
Часто, при выполнении задач люди ошибаются— не всегда больше, значит лучше.

Не парсь за раз то, что не сможешь распарсить быстро
Конфуций, 489 год до н. е.

У меня была задача— спарсить данные с сайта. Стандартно отдается только 10 строк данных в формате JSON.
Методом тыка было выявлено, что сайт может отдавать от 0 до 1500 строк за один раз.
Ну и сразу же пришла гениальная мысль в голову - "Будем парсить только по 1,5к, если меньше не будет требоваться!"
Воспользовавшись стандартным кубиком разбора JSONа я был немного огорчен. Такой объем данных он разбирал по 15 минут. А стандартные 10 строк "разбирало" моментально. Да и запросы очень глючили на моем билде( JSON— долго принимает и разбирает и Запрос VS Браузер. 0:1 ).
И тут пришла в голову вторая гениальная мысль— нужен эксперимент! Прям лабораторная работа, как в универе :ap: Так как делать было нехрен( голова отказывалась работать в нужном русле), был оформлен такой себе отчет :D


ЗенноЛаб




Лабораторная работа №1




Тема: "Парсинг сайта на запросах. Получение данных в формате JSON"




Выполнил: @Nord




2017


Цель работы: Определение необходимого числа строк для оптимальной работы парсера, учитывая время запроса к сайту, а так же сохранения полученных данных в таблицу.

Оборудование и материалы: Zennoposter Pro 5.10.7.0 ( позднее 5.10.5.1), yandex.ru, Asus ZenBook.


Ход работы

Вводные данные:
  • Отправляем запрос с параметром, указывающим количество возвращаемых строк. От 0 до 1000 с шагом 25.
  • В каждой полученной строке— около 160 переменных(значений), которые затем сохраняем в таблицу.
В ходе работы был изменен билд программы, из-за багов в котором, значимую роль в лабораторной работе играло так же время запроса к сайту( на глючной версии Зенны он колебался от 20 до 80 секунд, в нормальной - 1-5 сек).
Так что эксперимент будет не таким красочным, как планировалось:ah:
Во время работы было выявлено, что такими параметрами как "время запроса" и "время сохранения в таблицу" можно пренебречь, они актуальны только на первых шагах итерации, когда время "разбора" сопоставимо им. Собственно, только благодаря им не был наилучшим вариант отправки запроса на минимальное количество строк.
Ниже, в таблице, приведен красочный наглядный пример результатов эксперимента

Таблица №1

Из таблицы видно, что оптимальным является запрос на 75 строк( в данных н.у.).
При таком наборе параметров мы можем спарсить 10к строк за 12 минут.
Если бы послушали свое внутреннее "Я" которое хотело все и сразу— пришлось бы ожидать 2 часа 05 минут.
К тому же, на разбор 75 строк у нас ушло 3,8 сек, а на 1000 - 742 сек — что при увеличении количества строк "всего" в 10 раз, увеличило время выполнения более чем в 200 раз.
Ниже представлена диаграмма ( ну куда ж лабораторная работа без диаграммы :ap: )


Выводы. Ставить правильный билд, слушать @DmitryAk и переводить разбор JSON из стандартного кубика в C#, не гнаться за большими цифрами, они не всегда оптимальны.
:az:
 
Последнее редактирование:

DmitryAk

Client
Регистрация
14.12.2016
Сообщения
860
Благодарностей
824
Баллы
93
Серьезное такое исследование. Молодчага. Это я понимаю - научный подход)
UPD: сюда не хватает разбора на шарпе с либами с того же донора и на тех же условиях.
 
  • Спасибо
Реакции: Nord

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Нихера себе тебе было не лень все это разбирать. Я бы даже не задумывался и использовал бы HttpWebrequest + newtonsoft и выкинул бы всю работу с таблицами, так как для этого придумали классы
 
  • Спасибо
Реакции: Nord

Nord

Client
Регистрация
22.03.2012
Сообщения
2 406
Благодарностей
1 473
Баллы
113
UPD: сюда не хватает разбора на шарпе с либами с того же донора и на тех же условиях.
Это будет в ЛР №2 :D
Нихера себе тебе было не лень все это разбирать.
Ну именно вся канитель заняла минут 20( и шаблон отработал часа за 3).
Я бы даже не задумывался и использовал бы HttpWebrequest + newtonsoft и выкинул бы всю работу с таблицами, так как для этого придумали классы
Нужно разбираться долго в этом(но обязательно нужно), в этом случае я руководствовался тем, в чем разбирался, не хотел лезть в дебри. Да и почитав про NewtonSoft на форуме, понял что стандартный кубик JSON работает как раз на нем, и большой оптимизации и прироста производительности я не ожидал...
:-)
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 867
Баллы
113
Отличное исследование :-)

Побольше бы таких, быть может за ними и изменения какие-то последуют или оптимизации в ZP)
 
  • Спасибо
Реакции: Nord

surrealmix

Client
Регистрация
07.03.2013
Сообщения
715
Благодарностей
409
Баллы
63
Да и почитав про NewtonSoft на форуме, понял что стандартный кубик JSON работает как раз на нем
Если я правильно понял, то кубик теперь не использует эту либу.
http://zennolab.com/wiki/ru:changelog#zennoposter-51130-13062017
Код:
[+] Убрали зависимость от Newtonsoft.Json, если вам нужна для работы какая-то определенная версия Newtonsoft.Json, то можете спокойно ее использовать без правки config файлов.
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Если я правильно понял, то кубик теперь не использует эту либу.
http://zennolab.com/wiki/ru:changelog#zennoposter-51130-13062017
Код:
[+] Убрали зависимость от Newtonsoft.Json, если вам нужна для работы какая-то определенная версия Newtonsoft.Json, то можете спокойно ее использовать без правки config файлов.
Просто есть немало стандартных способов разбора JSON, включая стандартные средства c#. Также можно было бы просто взять исходный код либы, поменять Namespace и внедрить в зеннопостер.
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)