В этой записи я вам расскажу как легко можно спарсить изображения со стороннего сайта. Мы научимся парсить картинки и в конце я вам покажу готовый парсер для парсинга картинок.
Картинки парсить очень просто. Для этого нам нужно всего 2 функции file_get_contents(), которая нам уже известна и file_put_contents().
Внутри функции file_get_contents() прописываем адрес картинки. Для примера я возьму картинку из записи «Шпаргалка по Git. Основные Git команды» — prog-time/shpargalka-po-git-osnovnye-git-komandy/
Для начала я просто нажму на нее правой кнопкой мыши и выберу «копировать адрес изображения». Этот адрес мы вставляем в file_get_contents().
Для удобства запишем работу функции в переменную $img.
$img = file_get_contents('prog-time/wp-content/uploads/2018/10/SHpargalka-po-git-720x414.jpg');В функцию file_put_contents()передаем следующие параметры:
Первый параметр путь к файлу и его название. Например img/img1.jpg. Только сперва создайте директорию, так как если программа не найдет директорию, она выдаст ошибку.Вторым параметром передаем данные которые будем записывать. У нас это переменная $img в которой хранится работа функции file_get_contents().
URL картинок
Для того чтобы добавить изображение, необходимо прописать тег img и и внутри атрибута src прописать путь к файлу.
Зная это мы с легкостью может сделать обратное, нам нужно достать из тега значение этого атрибута.
Важный момент:Пути к файлу бывают 2 видов. Абсолютный и относительный.
Абсолютный путь имеет вид — prog-time/wp-content/uploads/2018/10/SHpargalka-po-git-720×414.jpg. Такой путь путь имеет протокол и является полным, начинающимся от корня сайта.
Относительный путь имеет вид — /uploads/2018/10/SHpargalka-po-git-720×414.jpg . Относительный путь имеет только часть адреса, который может быть написан по разному.
Основные правила написания относительного пути:
Если мы находимся на странице prog-time/wp-content/uploads/2018/10/index.php и хотим забрать картинку с адресом img.png. Полный адрес к изображению будет
prog-time/wp-content/uploads/2018/10/img.png
Если мы находимся на странице prog-time/wp-content/uploads/2018/10/index.php и хотим забрать картинку с адресом /img.png. Полный адрес к изображению будет
prog-time/img.png. Знак слеша в адресе означает что путь начинается от корневой директории.
Если мы находимся на странице prog-time/wp-content/uploads/2018/10/index.php и хотим забрать картинку с адресом images/img.png. Полный адрес к изображению будет
prog-time/wp-content/uploads/2018/10/images/img.png.
Если мы находимся на странице prog-time/wp-content/uploads/2018/10/index.php и хотим забрать картинку с адресом ../img.png. Полный адрес к изображению будет
prog-time/wp-content/uploads/2018/10/img.png .
Если бы не было двух точек и слеша, путь был бы такой
prog-time/wp-content/uploads/2018/10/img.png , но если их поставить, то они поднимают нас на папку выше и путь становится таким prog-time/wp-content/uploads/2018/10/img.png .
Теперь давайте на основе полученных данных попробуем написать простой парсер картинок. Для написания парсера мы будем использовать знания которые получили в прошлых записях.
Для начала нужно прописать подключение к сайту. Для примера я буду использовать, все ту же страницу записи.
require_once 'phpquery-master/phpQuery/phpQuery.php';//подключаем библиотеку phpQuery$url = 'prog-time/shpargalka-po-git-osnovnye-git-komandy/';//URL записи
$curl = curl_init();//инициализация запроса
curl_setopt($curl, CURLOPT_URL, $url);//сюда передаем URL нашей страницы
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//записывать в переменную, а не выводить
$result = curl_exec($curl);//запрос и запись в переменную $result
После этого производим поиск нужного нам элемента.
$pq = phpQuery::newDocument($result);//создается объект в котором весь код страницы$elem = $pq->find('.single-thumb img');//поиск элемента
$text = $elem->attr('src');//у найденного элемента вытаскиваем значение атрибута src
В конце нужно передать полученный адрес функцию file_get_contents() и сохранить найденное изображение, с помощью функции file_put_contents().
$img = file_get_contents($text);file_put_contents('test_img.jpg', $img);
Парсинг изображения с относительным путем
Если изображение имеет относительный путь, зная правила, вы с легкостью можете создать отдельную строку и добавить недостающую часть к имеющемуся адресу. И в дальнейшем собранный адрес, вы можете использовать в моем, выше написанном, коде.
Полный код получившегося парсера:require_once 'phpquery-master/phpQuery/phpQuery.php';//подключаем библиотеку phpQuery
$url = 'prog-time/shpargalka-po-git-osnovnye-git-komandy/';//URL записи
$curl = curl_init();//инициализация запроса
curl_setopt($curl, CURLOPT_URL, $url);//сюда передаем URL нашей страницы
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//записывать в переменную, а не выводить
$result = curl_exec($curl);//запрос и запись в переменную $result
$pq = phpQuery::newDocument($result);//создается объект в котором весь код страницы
$elem = $pq->find('.single-thumb img');//поиск элемента
$text = $elem->attr('src');//у найденного элемента вытаскиваем значение атрибута src
$img = file_get_contents($text);
file_put_contents('test_img.jpg', $img);
На этом всё!
Если у вас есть вопросы, пишите их в нашей группе - vk/progtime
Вы так же можете разместить свой вопрос на нашем форуме, где другие программисты смогут вам помочь в решение вашей задачи - vk/prog_time
В ней мы делимся своим опытом с другими начинающими программистами, поэтому обязательно ответим на ваш вопрос.
Так же прокачивайте свои навыки на нашем канале - www.youtube/c/ProgTime