Como extraer datos de una pagina externa con PHP

Por: Nicolas Seijas | Categoría: PHP

Mostrar los datos de una página mediante PHP es relativamente fácil, pero el verdadero “desafio” y lo más útil es tomar el texto y/o imágenes de una determinada DIV, span, tabla, etc de esa página externa.

El ejemplo que les mostrare para este código es tomar el estado del tiempo actual de la página accuweather:

<?php
$options = array('http' => array(
'method'  => 'GET',
));

$config= stream_context_create($options);
$config_final=file_get_contents('http://www.accuweather.com/es-ar/es/catalonia/barcelona/quick-look.aspx',false, $config);
preg_match_all("|<div style=\"width: 290px; height: 90px; background-color: #f6f4ef; padding: 5px 0px 5px 5px\">(.*)</div>|sU", $config_final, $tiempo);
echo $tiempo[1][0];
?>
</div>

Como pueden ver en el ejemplo se muestra el estado del tiempo actual en Barcelona.

1. Explicando el código

$config_final=file_get_contents('http://www.accuweather.com/es-ar/es/catalonia/barcelona/quick-look.aspx',false, $config);

En file_get_contents deberemos cambiar la direccion de ejemplo por la cual queramos extraer la información.

preg_match_all("|<div style=\"width: 290px; height: 90px; background-color: #f6f4ef; padding: 5px 0px 5px 5px\">(.*)</div>|sU", $config_final, $tiempo);

Como pueden ver, en preg_match_all hay que colocar el comienzo de la DIV, span, tabla, etc, exactamente igual a como la ves en el código fuente de la página. Por ejemplo el estado del tiempo que me interesaba estaba en:

<div style="width: 290px; height: 90px; background-color: #f6f4ef; padding: 5px 0px 5px 5px">

Para que lo tome correctamente en php debemos agregarle las siguientes barras:

<div style=\"width: 290px; height: 90px; background-color: #f6f4ef; padding: 5px 0px 5px 5px\">

A continuación buscaremos el final que en este caso es </div>, les dejo resaltado lo que pueden cambiar:

preg_match_all("|<div style=\"width: 290px; height: 90px; background-color: #f6f4ef; padding: 5px 0px 5px 5px\">(.*)</div>|sU", $config_final, $tiempo);

¿Te gustó el artículo?

Recomiendalo a través de las redes sociales

Comentarios

Si deseas agregar un código a tu comentario por favor usa el siguiente formato: <pre name="code" class="php">Tu código</pre>. Puedes reemplazar la clase con "js", "css", "sql", o "html". Si el código tiene algún "<" o ">" en tu código reemplazalo con: &lt; y &gt; respectivamente.

Este artículo tiene 5 comentarios

  • Pedro, comento el 29 de agosto del 2011:

    Excelente sitio el de ustedes, me agradó por lo claro y dedicado que son sus respuestas a los comentarios. Felicitaciones.
    Mi pregunta es: cómo identifico el div o tabla que quiero en una pagina que no conozco su construcción?
    Saludos

  • Nicolas Seijas, comento el 29 de agosto del 2011:

    Hola Pedro, muchas gracias por tu comentario. Primero que nada, si no conocemos el nombre de la div o tabla, lo que debemos hacer es ir a la página que deseamos extraer la información, hacer click con el botón derecho del mouse y clickear en “Ver código fuente de la página” (puede estar diferente dependiendo del Explorador) ahi se nos abrirá una pestaña o ventana nueva con el código fuente de la página, ahí solo deberemos buscar donde se encuentra la información que queremos y como se llama la div, tabla, etc que la contiene.

    Siempre respeta si es una div u otra etiqueta que lleva estilo como por ejemplo: div class=”ejemplo” colocar en pre_match_all la barra invertida delante de las comillas div class=\”ejemplo\”

    Saludos

  • Sergio, comento el 19 de octubre del 2011:

    Hola nicolas lo primero gracias por tus explicaciones muy buenas. Mi pregunta es y si la info esta dentro de un script y no es htlm se puede sacar oh no se podria gracias.

  • Nacho, comento el 10 de enero del 2012:

    Buenas Nicolas excelente el código.Me pregunta es la siguiente estoy intentando extraer un codigo de la siguien pagina el problema que la capa se llama hay alguna manera para pasar el mas el principio .Ya que el principio es siempre el mismo. Un saludo.

  • John, comento el 23 de abril del 2012:

    Hola, gracias por el post, pero tengo una pregunta.

    Hay una página web externa que tiene un formulario, se llena la información y se envía y no hay ningún problema, pero cuando se va a consultar la misma información que se ingreso, es incoherente, no arroja los resultados que yo ingrese anteriormente.

    Necesito capturar la información de las cajas de texto de esa web antes de darle clic en enviar y así controlar la información que yo registro para sustentar de que es la correcta y que la página externa no me genera correctamente cuando consulto.

    Porque copiar y pegar cada cosa del formulario toma mucho tiempo, como puedo capturar los valores de esas cajas de texto, teniendo en cuenta que no es mi página web?

    Les agradezco infinitamente si me ayudan.

    Saludos