Ayuda: cómo hacer este Scraping

Iniciado por hchabot, Abril 23, 2016, 12:25:27 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Saludos:

Mas o menos voy entendiendo las librerias de php, pero me surje una duda... PONGO EL CODIGO:

Código: php
<?php
    //Recogemos la información que necesitamos
     
    $url = 'http://www.meteoval.com/Prevision/lasolana1.php';
    $html = file_get_contents($url);
     
    $imgs = explode("<td width='65' height='50'", $html);
     
    //Mostramos el array que hemos recogido (solo para debug)
    /*echo "<pre>";
    print_r($imgs);
    echo "</pre>";*/
     
    //Puesto a que hay 8 imagenes (con texto), lo pasamos por la función "limpiar_imagen" para que muestre solo la imagen.
    for ($i=0;$i<=8;$i++){
            limpiar_imagen($imgs[$i]);
    }
     
     
    //Funcion limpiar_imagen
     
    function limpiar_imagen($info){
            $limpio = explode("<table",$info); //Quitamos <table de nuestra imagen
            $imagen = explode(">",$limpio[0]); //Eliminamos > de nuestra imagen
            $imagen = $imagen[1]."/>"; //Obtenemos nuestra imagen que está en la posición 1 del array y la cerramos (concatenamos />)
            echo $imagen; //Mostramos la imagen
    }

$abajo = imagecreatefromjpeg("http://www.atodaradio.es/fondo1.jpg"); //MAPA DE FONDO
$arriba = imagecreatefromgif($imagen); //IMAGENES EXTRAIDAS

// Obtengo los tamaños de las imagenes
$fondoAncho = imagesx($abajo);
$fondoAlto = imagesy($abajo);
$arribaAncho = imagesx($arriba);
$arribaAlto = imagesy($arriba);

// Copiamo la imágen de fondo a la imagen final
// Acá está la corrección antes tenia $fondoAncho y $fondoAlto
imagecopy( $abajo, $arriba, 0, 0, 0, 0, 65, 50 ); // Y COORDENADAS

// Damos salida a la imagen final
imagejpeg($abajo, $arriba); // IMAGEN FINAL

// Destruimos las imágenes
imagedestroy($abajo);
imagedestroy($arriba);

    ?>


Hasta la linea de puntos es la extracion de la imagenes, pero ahora viene lo bueno, la segunda parte del codigo se trata de montar las dos imagenes, la de fondo y la que extraemos. la duda y el error es que no puede crear una imagen sobre un archivo que no existe y por ello da el error:
CitarWarning: imagecreatefromgif(): Filename cannot be empty in /home/www/atodaradio.es/index.php on line 35
, logicamente los errores posteriores son por el error causado de la linea 35.

no quiero que me regañes
Citarblackdrake
por basarme en un codigo de ejemplo, pero logicamente no puedo crear un codigo sin tener ni idea de programacion... estoy en el capitulo 1 de las librerias jejejejeje.

El error lo entiendo que no puede crear una imagen para insertarla debido a que no esta creada, por lo tanto no la puede superponer... HAY ALGO QUE SE PASA POR ALTO.

¿independientemente del error no tendria que salir la imagen del fondo? Esta:
Código: php
http://www.atodaradio.es/fondo1.jpg


Muchas gracias a todos por la ayuda de antemano

Mayo 08, 2016, 07:26:40 AM #21 Ultima modificación: Mayo 08, 2016, 07:28:25 AM por blackdrake
Hola de nuevo, lamento la tardanza, sigo sin comprender porque quieres unir las dos imágenes en una vía PHP si puedes mostrar las dos imágenes (por separado) y moverlas a la posición que desees a través de CSS.

Te he modificado la función para que te sea más sencillo obtener las imágenes:

Ahora, las tienes todas en el array $pack desde las posiciones 1 a la 8 que será accesible en todo el documento (antes se mostraban con echo, por eso no podías "operar" con ellas):

Código: php

<html>
<head>
<style>
body {
background-image: url("http://img.fondosypantallas.com/wp-content/uploads/2009/11/vladstudio_worldinversed_1280x1024.jpg");
background-repeat: no-repeat;
}
</style>
</head>
<body>
<?php
//Recogemos la información que necesitamos

$url = 'http://www.meteoval.com/Prevision/lasolana1.php';
$html = file_get_contents($url);

$imgs = explode("<td width='65' height='50'", $html);

//Mostramos el array que hemos recogido (solo para debug)
/*echo "<pre>";
print_r($imgs);
echo "</pre>";*/

//Puesto a que hay 8 imagenes (con texto), lo pasamos por la función "limpiar_imagen" para que muestre solo la imagen.
for ($i=0;$i<=8;$i++){
   $pack[$i]=limpiar_imagen($imgs[$i]);
}

//Funcion limpiar_imagen

function limpiar_imagen($info){
$limpio = explode("<table",$info); //Quitamos <table de nuestra imagen
$imagen = explode(">",$limpio[0]); //Eliminamos > de nuestra imagen
$imagen = $imagen[1]."/>"; //Obtenemos nuestra imagen que está en la posición 1 del array y la cerramos (concatenamos />)
return $imagen;
}
                //Imágenes comprendidas desde pack1 a pack8
echo $pack[1];
echo $pack[2];
echo $pack[3];
echo $pack[4];
    ?>
</body>
</html>


De este modo, obtendrás algo como esto:


Obviamente puedes modificar la imagen de fondo (en este caso se lo puse al body, pero puedes hacerlo sólo para un div), de este modo y con el atributo position en css podrás mover las imágenes hasta el punto deseado.

Espero que así te resulte más entendible el código.

Un saludo.



Saludos:

me aclaro mejor y las imagenes las hago por capas. ahora viene lo bueno....jejejejeje

Código: php
<html>
            <head><title>PREVISION CASTILLA LA MANCHA</title>
                   
                            <style type="text/css">
#capa1{ position:absolute;
z-index:1;
top:400px;
left:600px;
width:750px;
height:600px;
}
#capa2{
position:absolute;
}
#capa3{ position:absolute;
z-index:1;
top:300px;
left:500px;
width:750px;
height:600px;
}

</style>
                   
            </head>
            <body>
// PREVISION MANZANARES
<div id="capa3"> <?php
                            //Recogemos la información que necesitamos
                             
                            $url[2] = 'http://www.meteoval.com/Prevision/manzanares1.php';
                            $html[2] = file_get_contents($url[2]);
                             
                            $imgs[2] = explode("<td width='65' height='50'", $html[2]);
                             
                            //Mostramos el array que hemos recogido (solo para debug)
                            /*echo "<pre>";
                            print_r($imgs[2]);
                            echo "</pre>";*/
                             
                            //Puesto a que hay 8 imagenes (con texto), lo pasamos por la función "limpiar_imagen" para que muestre solo la imagen.
                            for ($i=0;$i<=8;$i++){
                                       $pack[$i]=limpiar_imagen($imgs[$i]);
                            }
                           
                             //Funcion limpiar_imagen
                             
                            function limpiar_imagen($info){
                                            $limpio = explode("<table",$info); //Quitamos <table de nuestra imagen
                                            $imagen = explode(">",$limpio[0]); //Eliminamos > de nuestra imagen
                                            $imagen = $imagen[1]."/>"; //Obtenemos nuestra imagen que está en la posición 1 del array y la cerramos (concatenamos />)
                                            return $imagen;
                            }
                    //Imágenes comprendidas desde pack1 a pack8
                    //echo $pack[1];
                    //echo $pack[2];
                    echo $pack[3];
                    //echo $pack[4];
        ?></div>
//PREVISION LA SOLANA
<div id="capa1"> <?php
                            //Recogemos la información que necesitamos
                             
                            $url = 'http://www.meteoval.com/Prevision/lasolana1.php';
                            $html = file_get_contents($url);
                             
                            $imgs = explode("<td width='65' height='50'", $html);
                             
                            //Mostramos el array que hemos recogido (solo para debug)
                            /*echo "<pre>";
                            print_r($imgs);
                            echo "</pre>";*/
                             
                            //Puesto a que hay 8 imagenes (con texto), lo pasamos por la función "limpiar_imagen" para que muestre solo la imagen.
                            for ($i=0;$i<=8;$i++){
                                       $pack[$i]=limpiar_imagen($imgs[$i]);
                            }
                           
                             //Funcion limpiar_imagen
                             
                            function limpiar_imagen($info){
                                            $limpio = explode("<table",$info); //Quitamos <table de nuestra imagen
                                            $imagen = explode(">",$limpio[0]); //Eliminamos > de nuestra imagen
                                            $imagen = $imagen[1]."/>"; //Obtenemos nuestra imagen que está en la posición 1 del array y la cerramos (concatenamos />)
                                            return $imagen;
                            }
                    //Imágenes comprendidas desde pack1 a pack8
                    //echo $pack[1];
                    //echo $pack[2];
                    echo $pack[3];
                    //echo $pack[4];
        ?></div>
<div id="capa2"> <img src="http://atodaradio.es/fondo1.jpeg" /> </div>

            </body>
    </html>


como veras en el codigo he añadido capas osea DIV y a cada una es una imagen. La div capa2(Al final es la imagen de fondo), la capa div 1 es la prevision de la solana, y la div capa 3 es la de manzanares, pero me da un error que se que los datos entre la capa 1 y capa 3 se entrecruzan y dan error.
Si solo pongo la capa 2 y la 3 osea fondo y La solana sale bien y ademas lo he logrado poner en el sitio.

mi idea es llegar a hacer este mapa No tienes permitido ver los links. Registrarse o Entrar a mi cuenta, pero con los datos de otra web.


Ni siquiera te molestas en leer los errores, pues era muy obvio el fallo y si lo hubiese leído lo podrías haber solventado tu solo:

Código: php

<html>
            <head><title>PREVISION CASTILLA LA MANCHA</title>
                   
                            <style type="text/css">
#capa1{ position:absolute;
z-index:1;
top:400px;
left:600px;
width:750px;
height:600px;
}
#capa2{
position:absolute;
}
#capa3{ position:absolute;
z-index:1;
top:300px;
left:500px;
width:750px;
height:600px;
}

</style>
                   
            </head>
            <body>
<div id="capa3"> <?php
                            //Recogemos la información que necesitamos
                             
                            $url[2] = 'http://www.meteoval.com/Prevision/manzanares1.php';
                            $html[2] = file_get_contents($url[2]);
                             
                            $imgs = explode("<td width='65' height='50'", $html[2]);
                             
                            //Mostramos el array que hemos recogido (solo para debug)
                            /*echo "<pre>";
                            print_r($imgs[2]);
                            echo "</pre>";*/
                             
                            //Puesto a que hay 8 imagenes (con texto), lo pasamos por la función "limpiar_imagen" para que muestre solo la imagen.
                            for ($i=0;$i<=8;$i++){
                                       $pack[$i]=limpiar_imagen($imgs[$i]);
                            }
                           
                             //Funcion limpiar_imagen
                             
                            function limpiar_imagen($info){
                                            $limpio = explode("<table",$info); //Quitamos <table de nuestra imagen
                                            $imagen = explode(">",$limpio[0]); //Eliminamos > de nuestra imagen
                                            $imagen = $imagen[1]."/>"; //Obtenemos nuestra imagen que está en la posición 1 del array y la cerramos (concatenamos />)
                                            return $imagen;
                            }
                    //Imágenes comprendidas desde pack1 a pack8
                    //echo $pack[1];
                    //echo $pack[2];
                    echo $pack[3];
                    //echo $pack[4];
        ?></div>
<div id="capa1"> <?php
                            //Recogemos la información que necesitamos
                             
                            $url = 'http://www.meteoval.com/Prevision/lasolana1.php';
                            $html = file_get_contents($url);
                             
                            $imgs = explode("<td width='65' height='50'", $html);
                             
                            //Mostramos el array que hemos recogido (solo para debug)
                            /*echo "<pre>";
                            print_r($imgs);
                            echo "</pre>";*/
                             
                            //Puesto a que hay 8 imagenes (con texto), lo pasamos por la función "limpiar_imagen" para que muestre solo la imagen.
                            for ($i=0;$i<=8;$i++){
                                       $pack[$i]=limpiar_imagens($imgs[$i]);
                            }
                           
                             //Funcion limpiar_imagen
                             
                            function limpiar_imagens($info){
                                            $limpio = explode("<table",$info); //Quitamos <table de nuestra imagen
                                            $imagen = explode(">",$limpio[0]); //Eliminamos > de nuestra imagen
                                            $imagen = $imagen[1]."/>"; //Obtenemos nuestra imagen que está en la posición 1 del array y la cerramos (concatenamos />)
                                            return $imagen;
                            }
                    //Imágenes comprendidas desde pack1 a pack8
                    //echo $pack[1];
                    //echo $pack[2];
                    echo $pack[3];
                    //echo $pack[4];
        ?></div>
<div id="capa2"> <img src="http://atodaradio.es/fondo1.jpeg" /> </div>

            </body>
    </html>


Aquí tienes tu código funcionando, damos el tema como solucionado?

Saludos.



Saludos de nuevo... ya he visto el error jejejeje... soy tonto  :'( :'( :'( :'(

bien mas o menos va cojiendo color la cosa y la verdad he avanzado mucho, gracias a ti.

?se puede cambiar la imagen resultante de la otra web que es .gif a que muestre unas de mi carpeta en .png?

el resultado sale asi No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Saludos de nuevo... ya he visto el error jejejeje... soy tonto  :'( :'( :'( :'(

bien mas o menos va cojiendo color la cosa y la verdad he avanzado mucho, gracias a ti.

?se puede cambiar la imagen resultante de la otra web que es .gif a que muestre unas de mi carpeta en .png?

el resultado sale asi No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Si, se puede cambiar, la forma más sencilla sería hacer lo siguiente:

Código: php

$bodytag = str_replace("gif", "png", $variable);


Saludos.