Задать вопрос
kawabanga
@kawabanga

Есть ли готовый класс, чтобы парсить все изображения на php?

Задача простая, конечно же решается регулярками, но писать их займет достаточно длинное время.

Так вот, есть raw страница от curl, и там, необходимо сделать выборку всех изображений, будь то href от тега a, или background-image .
Есть такие библиотеки, куда подсунул страницу и получил результат?
  • Вопрос задан
  • 227 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 2
@Wol_fi
php, js, mysql, highload
$mtchs = array();
preg_match_all('/[\'|"].*?[jpeg|jpg|gif|png].*?[\'|"]/', $rawHtml, $mtchs);

что-то вроде такого. В $mtchs будут все значения аттрибутов, содержащие jpeg|jpg|gif|png в теле. Но регулярку не проверял, может нужно подправить. И учтите, что картинки чаще всего прописаны без хостов, и могут быть прописаны относительные ссылки, а не абсолютные.
Ответ написан
Комментировать
kawabanga
@kawabanga Автор вопроса
Спасибо, ребят! Воспользовавшись вашими советами, быстро написал функцию:

public function needimages($url){


            error_reporting(E_ALL);
           

      //  $url = 'http://www.rg.ru/2015/08/07/ltp.html';



        //определяем название хоста
        $host = false;
        if (preg_match ("/^(http[s]{0,1}:\/\/){0,1}(www\.){0,1}([a-zA-Zа-яёА-ЯЁ0-9\-]+\.){1}([a-zA-Zа-яёА-ЯЁ0-9\-]+\.){0,1}([a-zA-Zа-яёА-ЯЁ]+){1}\/{0,1}.*$/u", $url, $h))
            $host= $h[1].$h[2].$h[3].$h[4].$h[5];


        //тащим данные с url
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //Устанавливаем параметр, чтобы curl возвращал данные, вместо того, чтобы выводить их в браузер.
        curl_setopt($ch, CURLOPT_URL, $url);
        $data = curl_exec($ch);
        curl_close($ch);

  $str2 = preg_match_all('/[\'|"|(]([:a-zA-Z0-9_.\/]+(jpeg|jpg|gif|png).*?)[\'|"|)]/m', $data, $arr);

        $iurl = array(); //картинки наши

        if ($arr[1])

            foreach ($arr[1] as $ar) {
                if (preg_match ("/^(http[s]{0,1}:\/\/){0,1}(www\.){0,1}([a-zA-Zа-яёА-ЯЁ0-9\-]+\.){1}([a-zA-Zа-яёА-ЯЁ0-9\-]+\.){0,1}([a-zA-Zа-яёА-ЯЁ]+){1}\/{0,1}.*$/u", $ar, $h)) {
                    //если путь абсолютный
                    $iurl[] = $ar;
                   
                } elseif ($ar[0] == '/') {
//если путь начинается с /
                    $iurl[] = $host.$ar;
                    
                } else {
                    $iurl[] = $host.'/'.$ar;
                   
                }
             
            }

        return $iurl;
        




    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
А написать одну не сложную регулярку не?
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы