@lokomotor72

Как парсить фото через preg_match_all?

Всем привет

У меня есть код, через который парсяться картинки с сайта по ссылке

<?php
// страница с картинками
$text = file_get_contents("ссылка на сайт для парсинга");
 
// выцеливаем путь к картинкам и помещаем их в массив
preg_match_all("'<img\s+src=\"(\S*.(png|jpg))\"'si", $text, $result);      
 
echo"Найдено картинок на странице = ".count($result[1]);
//print_r($result[1]); // найденные картинки
echo("<br>");
echo("<br>");
echo("Urls - картинок...");
// создаём папку если таковой нет
if (!file_exists("images")) 
{
   mkdir("images", 0700); // создаём папку
}
 
$move_dir = "images/"; // Директория созданной папки
for($i = 0; $i <=(count($result[1])-1); $i++) 
{
// формируем урл на картинку  
$url = "http://www.site.com/".$result[1][$i]; 
echo("<br>");
echo($url);
echo("<br>");
$filename = basename($url); // Имя картинки  
file_put_contents($move_dir.'/'.$filename, file_get_contents($url));    
}
echo("<br>");
echo("Копирование завершено!");
 
?>


Они берутся в блоке с тега img

<figure itemprop="associatedMedia" itemscope="" itemtype="http://schema.org/ImageObject">
      <a data-w="174" data-h="250" class="item item-gallery" href="http://www.site.com/get_image/2/f4f6ea5666f7319419d4436374de951b/main/1920x1920/10000/10423/1152485.jpg/" itemprop="contentUrl" data-size="1280x1920" style="width: 154px; height: 220px; display: block;">
          <img src="http://www.site.com/contents/albums/main/370x250/10000/10423/1152485.jpg" itemprop="thumbnail" alt="">
      </a>
                                                                                   
    </figure>


А нужно, чтобы брались по ссылке которая окружает тег img
на которой еще class="item item-gallery" стоит

Мб кто подскажет, какие правки нужно внести в сам код?) Заранее спасибо)
  • Вопрос задан
  • 215 просмотров
Пригласить эксперта
Ответы на вопрос 1
@lolzqq
HTML,CSS,JS,PHP
тут
preg_match_all("'<img\s+src=\"(\S*.(png|jpg))\"'si", $text, $result);

а конкретнее тут
"'<img\s+src=\"(\S*.(png|jpg))\"'si"
шаблон перепишите, чтобы он улавливал href аттрибут из тега <a>
чтобы искать вот такую строку:
href="http://www.site.com/get_image/2/f4f6ea5666f7319419d4436374de951b/main/1920x1920/10000/10423/1152485.jpg/

Для экспериментов вам помощник: https://regex101.com/
У меня шаблон типо такого получается:
href=".*([a-z\_\-\.])*\.((jpg)|(png))\/"

hsBW6mH4BFk.jpg?size=1002x212&quality=96&sign=9d65b71aaf4e97f166a36fd76a3863dd&type=album

Далее через str_replace замените вхождения href=" и " на пустую строку "" и у вас на выходе чистый url.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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