БЛОГ

Решения проблем при парсинге интернет магазина

23.09.2014

Решения проблем при прасинге интернет магазина

 

В нашей предыдущей статье «Парсинг интернет магазина» мы в общих чертах рассказали, что такое парсинг сайта и зачем он нужен. В данной публикации мы предлагаем рассмотреть проблемы и подводные камни, с которыми мы столкнулись при разработке ресурса «SportsTerritory, и рассмотрение которых сможет помочь и вам.

Возможно, кому-то эта статья покажется банальным цитированием прописных истин, но она будет безусловно полезна тем, кто первый раз сталкивается с парсингом интернет магазина:

Рассматриваемые нами проблемы касаются следующих ситуаций:

 

Многопоточность для ускорения процесса парсинга

Многопоточноть — это азы парсинга данных. Нередко магазин может включать несколько десятков, а то и тысяч товаров, и на копирование всех их данных могут уйти дни.
Для ускорения процесса парсер работает в несколько потоков: он не просто обходит каталог товаров шаг за шагом, а разделяет товары на группы и работает сразу с несколькими одновременно. Это приводит к большей потребляемости ресурсов, но значительно сокращает время парсинга.

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

 

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

На первый взгляд тут и говорить не о чем: парсер проходит по всему каталогу сайта-донора и копирует всю структуру — категория за категорией. Скопировали, перевели и имеем зеркальную русскоязычную версию магазина.

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

Простым примером этого может быть категория, представленная баннером, текстовой ссылкой или даже фильтром. При этом в самом меню каталога ее нет.

Такие случаи приходится находить вручную и отдельно прописывать в парсере, иначе он их просто не подхватит: он не поймет, что фильтр является не просто фильтром, а полноценной категорией, индивидуально выведенной на магазин особенностями движка (либо просто прописанным «костылем»).

Эта проблема встречается нередко и заслуживает особого внимания, иначе на ваш магазин может лишиться существенной доли товаров.

 

Распределение товаров по нескольким категориям одновременно

Часто случается, что товар присутствует в нескольких категориях одновременно. К примеру, сумочка может находиться и в категории «Женское», и в категории «Аксессуары». Копирование товара в каждую категорию — это и скопление «мусора», и вероятное дублирование работы по переводу информации.

В данном случае парсер должен не только копировать товары согласно структуре магазина, но и проводить последующую проверку — с удалением всех дублей и очисткой каталога от «мусора». Для каждого товара остается только одна страница, которой и присваиваются все необходимые категории.

 

Объединение товаров с разных магазинов

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

Парсер — это всего лишь программа, и каждое название товара понимает как набор символов; для него разные наборы символов — это разные товары. А потому может сложиться ситуация, когда один товар в магазине будет представлен несколькими страницами, которые будут отличаться лишь названиями.

Никакая автоматизация процесса не поможет избавиться от этой проблемы на все 100%, а потому остается лишь один вариант: один раз пройтись по результату прасинга вручную и указать, какие товары являются дублями. Это займет немало времени, но это оправданное действие.

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

 

Регулярное добавление новых товаров, обновление цен и остатков на складе

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

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

  • Парсер может попасть под бан сайта-донора.

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

  • Источник может изменить что-то в скриптах самого магазина

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

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

 

Настройка цен товаров

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

Однако, как уже рассматривалось выше, товар может находиться в нескольких категориях одновременно. Как тогда быть магазину, какую стоимость брать?

Существует несколько вариантов решения данной проблемы: брать по последней хронологически добавленной категории, задавать приоритет цен в зависимости от категорий…

Мы предлагаем простое решение: сравнивать наценки товара с разных категорий и автоматически выбирать бóльшую из них. В данном случае вы точно не прогадаете.

 

Удаление несуществующих товаров

Вопрос удаления товара не так прост, как может показаться на первый взгляд. Парсер не сможет найти товар на сайте-доноре по нескольким причинам:

  • товар временно скрыт, так как его нет в наличии,

  • товар убрали, так как коллекция устарела и его больше не будут продавать,

  • парсер по техническим причинам не достучался до товара, и потому посчитал, что его нет.

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

  • во первых, страница товара уже набрала определенные позиции в поисковиках, и ее удаление (либо простое отключение) приведет к потере этих позиций,

  • во-вторых, вы уже перевели информацию о данном товаре, и не имеет смысла снова затрачивать на это ресурсы, если товар через определенное время вернется в продажу.

Самым простым решением в данном случае будет создание алгоритма проверки:

  • если товар только пропал с сайта-донора, то на вашем магазине он остается, но со статусом «нет в наличии»,

  • если товара нет длительное время (скажем, 2 недели), то страницу товара стоит скрыть,

  • если же товара нет на источнике несколько месяцев, то его можно смело удалять, чтобы не захламлять каталог лишними позициями (пусть и скрытыми).

 

Проверка наличия при добавлении товара в корзину

Магазин должен всегда иметь актуальную информацию об остатках на складе, иначе товар могут заказать, а в наличии его не будет. Это не конец света, но существенный минус в карму.

Проверять наличие товара на магазине-источнике каждые 5 минут — очень ресурсозатратно. А потому стоит настроить парсер так, чтобы он проверял наличие конкретного товара на сайте-доноре в момент добавления этого товара пользователем в корзину.

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

 

Воссоздание и настройка фильтров товаров

Перенести фильтры с одного магазина на другой — не проблема. Перевести их — займет больше времени, но тоже не представляется сложным. А теперь представьте, что вы парсите два магазина, собираете результат воедино и размещаете на одном сайте. Вот тут и начнутся сюрпризы.

Например, на первом сайте размеры представлены в одной системе, а на втором — в другой? Или первый источник дает фильтры «от 2 лет до 6″, а второй — «от 1 года до 3″ и «от 4 до 8 лет»? Движок магазина не поймет, как обработать поступающую информацию, какие конкретно фильтры важнее, и просто выведет все. В результате секция фильтров станет настолько хаотичной, что ее наличие будет только вредить.

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

 

Импорт товаров в разные CMS

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

А потому приходится учитывать особенности CMS магазина, на который будет транслироваться каталог донора, еще в самом начале написания парсера (либо его адаптации под конкретный ресурс).

Это занимает не очень много времени, но все-же стоит учитывать отличия в работе, скажем, CS Cart и Magenta. Иначе можно сильно обжечься при последующем расширении функционала парсера.

 

Одновременный парсинг нескольких интернет магазинов

Выше уже упоминались проблемы с номенклатурами товаров и фильтрами при парсинге нескольких интернет магазинов. Тут лишь стоит упомянуть, что отличаться так же могут:

  • параметры,

  • размеры, цветовые варианты,

  • цены,

  • остатки на складе,

  • изображения,

  • артикулы, и так далее.

Каждая данная ситуация требует отдельного рассмотрения, чтобы избежать дублирования товаров и скопления «мусора» на вашем сервере (не говоря уже о дополнительной работе по переводу информации).

Лучшим выходом является первоначальный ручной перебор всех товаров с удалением лишних, а так же внедрение алгоритма приоритетов — определение более важного источника в той ли иной ситуации.

Еще одним вариантом является создания отдельной «витрины» для каждого сайта-донора: это копия сайта с другим дизайном, но тем же функционалом и единой базой данных. Тогда на каждой «витрине» будет своя информация, а в списке заказов будет представлен сайт на котором совершили покупку.

Помощь профессионалов

Все выше перечисленное свидетельствует об одном: парсинг сайта — процесс не такой простой, как может показаться на первый взгляд. Если мы создаете серьезный бизнес с планами на несколько лет вперед, то лучше заказать парсинг интернет магазина у профессионалов. Мы сделаем работу качественно, в срок и всегда поможем советом и консультацией. Нам выгодно, чтобы ваш бизнес рос — тогда будет продолжаться и наше сотрудничество.