ayyjay
@ayyjay
PHP - Разработчик, верстальщик

Как реализовать парсер товаров из интернет магазина средствами PHP?

Здравствуйте всем.
Есть интернет магазин Fashiondays.bg.
Как можно реализовать парсер контента с этого ресурса, чтобы парсер после парсинга записывал все данные в БД (mysql) и время от времени проверял, происходили ли какие то изменения на сайте Fashiondays.bg. Т.е. если совершались покупки на сайте доноре, и у них нет в наличии какого-либо товара (т.е. есть разница с новыми данными и тем что у нас в БД), обновлял именно те данные, которые различаются.
Я в принципе понимаю суть всего этого, но всё таки решил спросить как всё это реализовать?
Заранее спасибо!
  • Вопрос задан
  • 20363 просмотра
Пригласить эксперта
Ответы на вопрос 10
Mandor
@Mandor
1. Скачиваем главную страницу (или другую стартовую, если нужная информация находится не на главной).
2. Парсим регулярками нужую нам информацию. Можно парсить не регулярками, а загрузить страницу в какой-нибудь html-парсер и получать от него данные в виде тегов.
3. Информацию полученную регулярками кладем в базу.
4. Парсим либо регулярками либо через внешнюю библиотеку html-парсера ссылки на другие страницы.
5. Если ссылки нам подходят (не ведут на внешний сайт и другие бесполезные для нас страницы) - переходим по ним рекурсивно. Далее повторяем цикл с начала (только парсим не главную, а ту на которую перешли).

Для обновления инфы на своем сайте запоминайте исходные id данных (ну или что-нибудь другое вместо id), и если такие записи в вашей БД уже есть - обновляйте их.
Ответ написан
konst20
@konst20
Программист, преподаватель, немного электронщик
Я активно использовал Zend_Dom_Query (работает без самого ZendFW, несколько файлов от фреймворка нужно подключить будет к проекту). Просто, понятно и быстро
http://framework.zend.com/manual/1.12/ru/zend.dom.query.html

Вот структура нужных файлов/папок от Zend
4fdb361154d7f5590882c8f78a54e8dd.png

и пример кода (кусок парсера хорошей погоды)
/**
     * Получение погодных "значений"
     * @return array
     */
    protected function parse_weather_page(){

        $page = $this->get_page_with_weather();

        $weather = array();
        $zDom = new Zend_Dom_Query($page);
        $elements = $zDom->query($this->weather_css);
        foreach($elements as $dom_element){
            $weather[] = $dom_element->getAttribute('title');
        }

        return $weather;
    }
Ответ написан
GeneMoss
@GeneMoss
void
А fashiondays.bg в курсе, что вы у них информацию «заимствуете»? У них там какое-то приложение для iPhone есть, а значит есть какое-то api... Если вы их партнер не проще ли воспользоваться этим api?
Ответ написан
А можно я возьмусь за написание этого скрипта ?
Ответ написан
http://simplehtmldom.sourceforge.net/ - подключить один файл и начинаешь парсить как jQuery.
премьер: $html->find("div.item");
Ответ написан
KEKSOV
@KEKSOV
Здесь подробно обсуждался парсинг. Как сохранить в БД это другой, но тоже решаемый вопрос, многое зависит от вашей конкретно задачи.
Ответ написан
@hav0k
Используйте Xpath. Не надо пользоваться регулярками. Код становиться более простой, и проблем будет меньше. Если код не валидный, пропускаем забыл через какую программу, т.к. не когда не было проблем с валидностью html.

Нокогири: парсинг HTML в одну строку
Ответ написан
ayyjay
@ayyjay Автор вопроса
PHP - Разработчик, верстальщик
@psrafo, так то Я пробовал эту библиотеку, выдаёт ошибку!
Ответ написан
@Alexz29
Как быстро написать парсер товаров.

Для получения описания и картинки вы можете воспользоваться бесплатной версией API:
PHP code:
<?php
        //поисковая фраза
        $string='Процессор i5 Haswell';

        //отправка get запроса на сервер
        $json=file_get_contents('http://4rgo.ru/search/index/?q='.$string);

        //переписываем json в массив
        $result=json_decode($json,true);

        //печатаем
        print_r($result);
        ?>


format-переменная указывает на формат возвращаемых данных. Она может быть :JSON,XML
q-Поисковая фраза

Пример запроса:
http://4rgo.ru/search/index/?q=i5 Haswell&format=json


Ответ в JSON:
{
            id: "3560",
            name: "Intel Core i5 Haswell",
            bref_description: "|Socket LGA1150
                     |Частота процессора 2300-3400 МГц
                     |Объем кэша L2 512-1024 Кб
                     |Объем кэша L3 4096-6144 К
                     |Поддержка SSE2
                     |Поддержка SSE3
                     |Встроенный контроллер памяти ",
            name_category:  "Процессоры (CPU)",
            name_manufacturer:  "Intel",
            img: "http://wallet.4rgo.ru/img/7ff7a9f75bd64c34d42cef0f9d89d044.jpg"
        }
Ответ написан
silenzushka
@silenzushka
Маркетинг-гик и интернет-предприниматель
Есть инструмент Product API для парсинга товаров в любых интернет-магазинах и любой валюте. Пишите простой скрипт, который сохраняет данные, полученные от API в любую базу. Потом проверяете указанный список с необходимой периодичностью.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы