kawabanga
@kawabanga

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

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

Так вот, есть raw страница от curl, и там, необходимо сделать выборку всех изображений, будь то href от тега a, или background-image .
Есть такие библиотеки, куда подсунул страницу и получил результат?
  • Вопрос задан
  • 226 просмотров
Решения вопроса 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
Думаю за деньги
А написать одну не сложную регулярку не?
Ответ написан
Ваш ответ на вопрос

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

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