Tema:
Expresiones regulares/Archivos HTML
Pregunta:
¿Como leer un a pagina web y sacar las imagenes
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 <[email protected]>
* @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:- Leemos el archivo con file() hacia un array y lo transformamos a una cadema con implode() (*)
- 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.
- 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)