Парсинг каталога товаров с сайта на 1С–Битрикс

Парсинг каталогов товаров, как оказалось, тема довольно востребованная — в последнее время частенько приходится заниматься этим дерьмом 🙂

Суть такая — чел собирается открыть онлайн магазин, обращается в Advantshop, те в свою очередь передают упаковку и выполнение прочих услуг своим партнёрам, ну т.е. нам и ко. Обычно парсинг магазина это довольно простая процедура, но Битрикс оказался не так прост 😀

Во–первых, в Битриксе есть встроенный функционал для усложнения этого процесса — первое время меня банили по IP буквально через каждые 50–100 страниц, при том, что я использовал технику со случайным таймингом между запросами.

Но у науки нашёлся ответ на эту задачку. Я поставил в Chrome расширение — Easy Auto Refresh, которое каждые две минуты обновляло страницу на сайте. Исходя из того, что эта техника позволила сократить тайминги между запросами — подозреваю, что за механизм блокировки отвечает некий JavaScript.

Мои парсеры всегда кэшируют результаты запросов чтобы не дыдосить сайты впустую.

В случае с этим сайтом, кэш страниц с категориями (+ страницы пагинатора) заняли 2.4 Гб., кэш страниц товаров — 31.2 Гб.

Почему так много? Всё просто — в среднем, HTML страница на том сайте весит ~ 1 Мб. Только представьте — 1 МЕГАБАЙТ HTML! Забавно, что те чуваки в вакансиях приглашают прогеров на зарплаты от 130–160 тыс. рублей.

Короче, в первый прогон, сам парсинг я решил отключить и просто загнать все нужные страницы в кэш. Эта процедура заняла у меня около 54 часов (т.е. это примерное время безостановочного выполнения PHP скрипта). За это время Chrome дважды протекал по памяти и почти намертво вешал систему (благо, я вовремя его убивал и перезапускал) — уж не знаю, вина это сайта, самого Chrome или расширения Easy Auto Refresh, но факт в том, что каждые 25–26 часов kswapd начинал неиствовать и пытаться загнать процессы в своп.

 

Кстати, самое забавное — у клиента тариф подразумевает максимум 5000 товаров. Я выгрузил что–то около 35680 товаров. Клиент сам будет выбирать какие товары ему не нужны, только вот он наверняка не ожидал что их СТОЛЬКО.

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

 

…А вообще, в будущих версиях, вероятно, стоит предусмотреть использование gzip в загрузчике, чтобы сразу пережимать весь этот хлам. Интересно, насколько вырастет время обработки — сейчас она у меня занимает ~6 часов из кэша, а на выходе — 14 CSV файлов в которых максимум по 4000 записей. Такой вот reduce 🙂

 


Вот такой вот конец недели выдался. А вы как встретили уикэнд?


 

comments powered by Disqus