Foros del Web » Programando para Internet » PHP »

Leer un a pagina web y sacar las imagenes

Estas en el tema de Leer un a pagina web y sacar las imagenes en el foro de PHP en Foros del Web. Hola gente... Despues de ver el foro, buscar y exprimirme la cabeza.... no consigo hacer una cosa que es la siguiente: Necesito leer un archivo ...
  #1 (permalink)  
Antiguo 20/12/2003, 09:22
 
Fecha de Ingreso: enero-2002
Mensajes: 15
Antigüedad: 15 años, 10 meses
Puntos: 0
Pregunta Leer un a pagina web y sacar las imagenes

Hola gente...
Despues de ver el foro, buscar y exprimirme la cabeza.... no consigo hacer una cosa que es la siguiente:
Necesito leer un archivo html y sacar de él las imagenes que contenga para mostrar solo las imagenes .

Tengo algunas nociones de como hacerlo, pero en la practica soy un poco nulo ;) Habia pensado meter el contenido del archivo en un array, luego recorrer el array y mostrar los resultados, pero no me sale.

Alguien me puede echar una mano?
Muchas gracias amigos

Última edición por preto; 20/12/2003 a las 21:07
  #2 (permalink)  
Antiguo 20/12/2003, 10:49
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 3 meses
Puntos: 8
Vas por buen camino.
Lo primero que debes hacer es lleval el contenido del archivo hacia un array. Esto es muy sencillo y lo haces con file(): http://www.php.net/file
Luego, para recorrer el array ulilizas algun bucle, preferentemente foreach: http://www.php.net/foreach
Y de esta manera, en cada vuelta del bucle, tendras una variable con una linea del archivo.
A esta variable tendras que aplicarle alguna expresion regular para que "examine" el HTML y busque los paths de las imagenes.
En este ultimo paso te puedo ayudar:
Mete esto dentro del bucle
Código PHP:
// se supune que $linea es la linea del archivo
preg_match_all('/<img src="([^"]+)"/i'$linea$match);
$pathimgs array_merge($pathimg$match[1]);
unset(
$match); 
y cuando termine tendras una matriz $pathimgs con todos los paths de las imagenes.

Trata de armarlo y lo publicas.

Saluditos!
  #3 (permalink)  
Antiguo 20/12/2003, 11:14
 
Fecha de Ingreso: enero-2002
Mensajes: 15
Antigüedad: 15 años, 10 meses
Puntos: 0
Tengo lo siguiente... pero claro... no me funciona :(

<?php
$desc = file("pagina.html"); //Abrimos el fichero HTML
while (!feof($desc)) //Leemos linea por linea
{
$linea = fgets($desc, 256);
// se supune que $linea es la linea del archivo
preg_match_all('/<img src="([^"]+)"/i', $linea, $match);
$pathimgs = array_merge($pathimg, $match[1]);
unset($match);
}
?>

Tienes alguna idea mas fran86? muchas gracias
  #4 (permalink)  
Antiguo 21/12/2003, 06:45
 
Fecha de Ingreso: enero-2002
Mensajes: 15
Antigüedad: 15 años, 10 meses
Puntos: 0
A ver si alguien me puede echar una mano, toy mas liado.....

ahora tengo lo siguiente:
<?php
$arr = file("pagina.html");

foreach ($arr as $key => $linea) {

// se supune que $linea es la linea del archivo
preg_match_all('/<img src="([^"]+)"/i', $linea, $match);
$pathimgs = array_merge($pathimg, $match[1]);
echo "$pathimgs";
unset($match);

}
?>

pero no sale nada, solo sale ArrayArrayArray.....

Algun idea de como hacer lo que quiero???
Desde ya muchas gacias
  #5 (permalink)  
Antiguo 21/12/2003, 12:58
Avatar de macabro  
Fecha de Ingreso: enero-2003
Ubicación: venus >> ((_\
Mensajes: 254
Antigüedad: 14 años, 10 meses
Puntos: 1
Hola preto , yo solo tengo un script que muestra las imagenes de un directorio si quieres te la paso
saludos :)
  #6 (permalink)  
Antiguo 21/12/2003, 13:11
 
Fecha de Ingreso: enero-2002
Mensajes: 15
Antigüedad: 15 años, 10 meses
Puntos: 0
Gracias macabro, te mando un mensaje privado con mi mail.

Por otro lado, algun alma que sepa como hacer lo que pido???
Tan dificil es?

venga amigos, un saludo a todos....
  #7 (permalink)  
Antiguo 23/12/2003, 03:26
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 3 meses
Puntos: 8
Lo que te puse tenia un pequeñito error, me comi una "s":
tendria que ser asi:
Código PHP:
$pathimgs array_merge($pathimgs$match[1]); 
Igualmente, "debuguendo" esto me di cuenta que la expresion regular no cazaba algunas situaciones, asi que me puse las pilas que creo que quedo joya

La funcioncita quedo asi:
Código PHP:
/**
* Imagenes de un archivo HTML

* Examina un archivo HTML en busca de sus imagenes para
* luego devolver su correspondiente 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;
    }

Documentada y todo!

Saluditos!

Última edición por fran86; 23/12/2003 a las 03:34
  #8 (permalink)  
Antiguo 23/12/2003, 10:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
fran86 ...

Subelo a las FAQ's!!! jeje.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 23/12/2003, 11:54
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 3 meses
Puntos: 8
OK.

Saludos, y by the way, felices 11000 posts, que al parecer ya ni se festejan.
  #10 (permalink)  
Antiguo 27/12/2003, 19:47
 
Fecha de Ingreso: enero-2002
Mensajes: 15
Antigüedad: 15 años, 10 meses
Puntos: 0
Lo siento Fran86, muchas gracias por las molestias, no pude responder antes....
Pero me sigue sin funcionar, pongo lo siguiente:

imagenesHTML("pagina.html", $norepetidos = true);

y no sale nada... alguna idea de porque?

muchas gracias....
  #11 (permalink)  
Antiguo 28/12/2003, 04:25
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 3 meses
Puntos: 8
La funcioncita te devuelve un array() con los paths de las imagenes. Este array luego lo puedes recorrer con un bucle foreach() y hacer lo que te guste con las imagenes.

Con respecto al segundo paramentro, este los puedes setear a true, o a false, y lo estas haciendo incorrectamente.
Donde dice $norepetidos = true, quiere decir que por defecto toma el valor true; o sea que no es nesesario enviar el segundo parametro.
Código PHP:
$array imagenesHTML("pagina.html");
// O de este modo
$array imagenesHTML("pagina.html"false); 
Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:53.