PHP: ¿Cómo leer un a pagina web y sacar las imagenes?

De Foros del Web

Con las siguiente funcion podemos hacerlo: Código PHP:

/**
* Imagenes de un archivo HTML
* 
* Examina un archivo HTML en busca de sus imagenes para
* luego devolver su direccion relativa.
* 
* @author  fran86       <fran86@myrealbox.com>
* @param   string       $archivo      Path correspondiente al HTML a examinar.
* @param   bool         $norepetidos  Opcional para no repetir las imagenes.
* @return  array|false  Array con los paths relativos de las imagenes
* 
*/
function imagenesHTML($archivo, $norepetidos = true)
{
    $contenido = file($archivo);
    $contenido = array_map("trim", $contenido);
    $contenido = implode(" ", $contenido);
 
    if ( preg_match_all('/<img([^<>]+)>/i', $contenido, $match) ) {
            foreach($match[1] as $atributos) {
                if ( preg_match('/src="([^"]+)"/i', $atributos, $matchpaths) ) {
                    $pathimgs[] = $matchpaths[1];
                } elseif ( preg_match('/src=([^ ]+)/i', $atributos, $matchpaths) ) {
                    $pathimgs[] = $matchpaths[1];        
                }
                unset($matchpaths);
            }
    }
    if ( !empty($pathimgs) ) {
        if ($norepetidos) {
            return array_unique($pathimgs);
        } else {
            return $pathimgs;
        }
    } else {
        return false;
    }
}  

Que la utilizamos de este modo: Código PHP:

$paths = imagenesHTML("http://www.forosdelweb.com/s/foro18.html");  // Ahora $paths es un array que contiene las direcciones (relativas) de todas las imagenes que aparecen en la pagina http://www.forosdelweb.com/s/foro18.html  

Explicacion breve:

  1. Leemos el archivo con file() hacia un array y lo transformamos a una cadema con implode() (*)
  2. Aplicamos el patron '/<img([^<>]+)>/i' con preg_match_all() para buscar todos los tags <img XXX >. Notar que se utiliza /i al final para realizar una busqueda que no distinga mayusculas/minusculas.
  3. Recorremos el array que resulta de la operacion anterior y aplicamos 2 patrones posibles que serviran para cazar el path del atributo SRC (dentro de <img>) este o no entre comillas.


(*) Para abrir paginas "externas" (que empiezan con http://blablabla) es necesario setear allow_url_fopen = ON en el PHP.INI (http://ar2.php.net/manual/en/ref.fil...llow-url-fopen)


--Fran86 23 Dic 2003

Este artículo es parte de las FAQs de PHP y el Manual de PHP.

Herramientas personales