Парсер для интернет-магазина
Добрый день, уважаемые юзернеймы. Мне, как программисту, была поставлена интересная задача - спарсить 20 000 тысяч наименований товара с веб-сайта одного известного интернет-магазина. До этого мне приходилось делать парсеры только в учебных целях. Задача была интересная и новая для меня. Поэтому, прошерстив сайт Сергея Бринна, ваш покорный слуга принялся за дело... разработать программу парсера для интернет-магазина.
В статье я не буду рассказывать о том, что такое парсер, как научиться программировать за 21 день, как захватить мир и прочие подобые вещи. Скорее это обзор того инструментария, который я использовал, проблем, с которыми столкнулся и, самое главное, результатов, какие были достигнуты.
Парсер интернет-магазина на PHP: проблемы и решения
Для разработки парсера (а по сути граббера интернет-магазина) выбор пал на язык PHP, так как заказчику нужна была интеграция с его интернет-магазином, написанным именно на данном языке. На учебе нас часто заставляли в обязательном порядке использовать для парсинга регулярные выражения. Но эта идея была отброшена тут же, как полная безумия. Была выбрана библиотека HTML SIMPLE DOM. По ней оказалась куча информации в интернете, так что проблем с её разбором не возникло. Из PHP, кроме основ, нужно было разобраться в работе с URL. Вся работа велась с локального сервера, так что пришлось поставить на мою убунту LAMP. Этого мне оказалось достаточно для того, чтобы выполнить ТЗ.
Первая проблема, которая возникла — ограничение на количество запросов к сайту-донору. Сервер думал, что мой парсер пытается его ддосить. Вылечилось кодом
sleep(4);
что крайне негативно сказалось на скорости выполнения. Прасер засыпал на 4 секунды после считывания информации об одном товаре. Время было выбрано опытным путем.
Известно, что DOM любит есть очень много оперативной памяти. При парсинге самых больших категорий я выставлял весьма внушительное количество ОЗУ.
ini_set("memory_limit", "256M");
Тогда хватало. Иначе могло ругаться на нехватку.
На сайте-доноре и в базе данных моего сайта оказались разные кодировки. Это выяснилось, когда уже спарсилось приличное количество товаров. О такой вероятности лучше бы подумать заранее.
Но наиболее значимая проблема — уязвимость к изменениям на сайте-доноре. Если ТАМ захотят поменять, к примеру, название класса HTML — в парсере это тоже придется сделать. Так что без техподдержки это приложение скорее всего не долго будет корректно работать.
Итого на выходе получилось небольшое веб-приложение, которое на вход принимает URL категории, которую требуется спарсить, и категорию из списка, куда нужно писать информацию. А на сайте появилось на 20 тысяч товаров больше. Спасибо за внимание.
При возникновении вопросов относительно продвижения сайтов, продвижения интернет-магазинов, включая решения парсинга контента интернет-магазинов Вы можете звонить по тел.: (095)-300-57-57.
Статья создана в гараже Веб-Машины 29.12.2015 года. Автор - Артем Петров.