Верстакфорум практиков
рекламаiprazon: приватные серверные адреса IPv4 и SOCKS5, безлимитный трафик, бесплатный тест до 2 часов
ФорумСбор данных

Хранить сырые ответы или только разобранное

dobrynin_a
dobrynin_a
Знаток
сообщений 1690
с апр
22 августа, 17:07первое сообщение

Спор с напарником, третий день идёт. Я складываю ответы сайта как есть, потом разбираю их отдельным шагом. Он говорит, что это лишний диск и лишний шаг, и предлагает разбирать прямо в момент запроса, а на диск писать готовые поля.

Аргумент у него простой: сырьё за месяц набирает под двести гигабайт, и никто в него ни разу не заглядывал.

Мой аргумент: когда разметка поедет, из готовых полей я прошлое не восстановлю, придётся ходить заново по всему каталогу.

Кто как живёт? Интересуют цифры с рабочих прогонов, вкусовщину можно опустить.

hexdump
hexdump
Знаток
сообщений 940
с июн
1 января, 08:24#2

Храню сырьё. Ровно по твоему аргументу.

Второй заход по каталогу на сто тысяч карточек это часы работы и лишний след на сайте. Разбор по сохранённому файлу это минуты и ноль запросов наружу.

Оксана В.
Оксана В.
Участник
сообщений 350
с дек
8 июня, 11:41#3

Тоже храню, но не всё подряд. Товарные карточки да, а списки и навигацию выбрасываю сразу после того, как из них вынуты адреса. Списки восстанавливаются дёшево, карточки дорого.

rawsocket
rawsocket
Ветеран
сообщений 2290
с фев
15 ноября, 14:58#4

Двести гигабайт это потому, что вы храните HTML как есть.

Возьмите сжатие на уровне файла и посмотрите, что останется. Типовая карточка магазина ужимается раз в восемь, местами в двенадцать: там половина веса это повторяющаяся разметка шаблона, она сжимается почти в ничто.

вес одной карточки до и после
вес одной карточки до и после

Двести гигабайт превращаются в двадцать пять. Спор про диск после этого обычно заканчивается.

читаю байты, а потом уже документацию
dobrynin_a
dobrynin_a
Знаток
сообщений 1690
с апр
22 апреля, 17:15#5
rawsocket: там половина веса это повторяющаяся разметка шаблона

Про сжатие поштучно понял. А если сложить тысячу карточек в один архив, будет ещё лучше? Шаблон-то у них общий.

rawsocket
rawsocket
Ветеран
сообщений 2290
с фев
1 сентября, 08:32#6

Будет, и заметно: общий словарь ловит повторы между файлами. У меня пачка из тысячи карточек в общем архиве весит примерно вдвое меньше, чем те же карточки, сжатые по одной.

Минус в том, что достать одну карточку из середины архива тяжело. Поэтому я держу пачки по дню и по домену: файл 2-fevralya-shop-a.tar.zst, внутри карточки за день. Нужно перебрать день, распаковываешь поток и читаешь на лету, не разворачивая на диск.

читаю байты, а потом уже документацию
skript_kid
skript_kid
Новичок
сообщений 54
с сен, второй сезон
8 февраля, 11:49#7

а зачем вообще держать html, если можно сохранять json с полями и рядом кусок html только того блока, откуда берутся поля?

Ринат Ахметов
Ринат Ахметов
Участник
сообщений 700
с авг
15 июля, 14:06#8

Так тоже делают, и это разумная середина. Только режьте с запасом: берите всю карточку товара целиком, вместе с соседними блоками. Иначе через месяц вам понадобится поле, которого в вырезке нет, и вы опять пойдёте на сайт.

Оксана В.
Оксана В.
Участник
сообщений 350
с дек
22 декабря, 17:23#9

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

hexdump
hexdump
Знаток
сообщений 940
с июн
1 мая, 08:40#10

Добавлю про то, чего в споре обычно не хватает: сырьё окупается не только при переезде разметки.

Первое. Когда цифры в отчёте выглядят странно, вопрос всегда один: сайт так отдал или мы так разобрали. По сохранённому ответу это проверяется за минуту. Без него начинается гадание, и обычно виноватым назначают парсер, хотя там половина случаев про сайт.

Второе. Разбор редко получается верным с первого раза. У меня нормальная жизнь правила такая: написал, прогнал по сохранённой тысяче ответов, увидел, что на трёх сотнях выходит пусто, поправил, снова прогнал. Это цикл в пару минут. Если каждый круг требует ходить наружу, вы либо перестаёте править разбор, либо ловите бан.

Третье. Сайт иногда отдаёт разное разным. По сохранённым ответам видно, что часть страниц приходит в урезанном виде, и это ловится сравнением веса ответов между собой. На готовых полях такой перекос не виден совсем.

И про диск: сырьё старше двух месяцев я переношу на медленный носитель, а старше полугода удаляю пачками. За всё время понадобилось поднять архив трижды, и каждый раз это экономило дня три работы.

dobrynin_a
dobrynin_a
Знаток
сообщений 1690
с апр
8 октября, 11:57#11

Хорошо, показал напарнику замер по сжатию. Двести гигабайт в месяц превратились в двадцать восемь, и это его переубедило быстрее любых слов.

Остался вопрос по схеме хранения: класть пачки на обычный диск или сразу в объектное хранилище?

rawsocket
rawsocket
Ветеран
сообщений 2290
с фев
15 марта, 14:14#12

Начните с диска, пока объём в пределах машины. Объектное хранилище имеет смысл, когда прогонов несколько и они на разных серверах.

Что хранимСрокГде лежит
карточки товаров60 днейбыстрый диск, пачки по дню
карточки товаровдо 180 днеймедленный носитель
списки и навигациядо конца прогонавременная папка
разобранные полябез срокабаза
читаю байты, а потом уже документацию
dobrynin_a
dobrynin_a
Знаток
сообщений 1690
с апр
22 августа, 17:31#13

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

Спор закрыт, спасибо всем.