PHP парсер картинок с сайта

Идея программы для скачивания и обработки фото с сайтов – витала в мыслях давно. Я даже обозначил основные принципы идеи в старой статье. Приступим же к реализации.

Задача парсера: Скачать картинки с сайта который не использует карту сайта или RSS ленту, но на сайте присутствует поиск товара по артикулу. Сначала скачаем и подключим библиотеку PHP Simple HTML DOM Parser. Возьмём для примера сайт донор, который не будет на нас обижаться за наши мелкие проказы. Например этот.

Создаём обычный php файл и подключим к нему скаченную библиотеку.

include_once('simple_html_dom.php');

Сразу тестируем работу на живом сайте. Пробуем получить все ссылки с главной страницы.

foreach($html->find('a') as $element) 
   echo $element->href . '<br>';

Получаем кучу данных не пригодных для работы за то определили что библиотека подключена и работает:

PHP парсер - первые данные

Создадим пустой массив и наполним его тестовыми данными. Позже мы будем брать данные из формы или из файла, пока сойдёт и так.

$vendor = ["Ч05027", "ч30482", "ч30483"];

Исходя из того, что поиск работает GET запросом ?q= на странице /search/ – в цикле пропустим все артикулы через него.

foreach ($vendor as &$value) {
    $html = file_get_html('https://xn--h1aeekjh.xn--p1ai/search/?q='.$value);
}
PHP парсер - тег для поиска

Следом найдём <div> с результатами поиска и найдём тег где хранится картинка первого результата – в нашем случае .catalog-list-img. Выводим значение дива:

$vendor = ["Ч05027", "ч30482", "ч30483"];
foreach ($vendor as &$value) {
    $html = file_get_html('https://xn--h1aeekjh.xn--p1ai/search/?q='.$value);
    foreach($html->find('.catalog-list-img img') as $e){
        echo $e->innertext . '<br>';
    }
}
PHP парсер - обработанные данные

Данные получили, теперь уберём всё лишне. Поменяем echo $e->innertext; на echo $e->src; получим чистые ссылки на картинки.

Создадим папку куда будем собирать картинки и функцией file_put_contents() скачаем нудные нам картинки из массива.

$path = './img/'.$value.'.png';
file_put_contents($path, file_get_contents("https://xn--h1aeekjh.xn--p1ai".$e->src));

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

  • PHP парсер сбора картонок – есть
  • Использование данных из формы или из файла
  • Обработка ошибок работы программы / исключения
  • Подключение нескольких сайтов
  • Обработка фото (размер, качество, мета теги, соотношение сторон)
  • Архивация данных для скачивания пользователем
  • План чистки старых данных

Исходники будут храниться на github.com

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *