¿Cómo obtener el contenido (datos) de otro sitio web con PHP
28 de marzo de 2008 6 comentarios
Tome el contenido de otro sitio es la tarea que tenía que hacer. Pensé que sería fácil, pero las cosas salieron exactamente como he planeado… Afortunadamente, logró! Aprende, también, y recoger información de otros sitios web en Internet.
La misión: obtener el contenido de un sitio
Hoy en día, en el trabajo, tenía la tarea de "tirar" algunos datos de un sitio a "injerto" en un extracto de un sitio web que estoy ayudando a desarrollar. Cuando yo era como última tarea antes recordar un momento en que un amigo hizo lo mismo (y, en ese momento, él me explicó, más o menos, lo hizo). Pensé que sería muy fácil llevar a cabo la tarea, pero con el tiempo, "recuerda" que no soy tan bueno como el Gevã… rsrs
La solución: las funciones de PHP y expresiones regulares
Pasé a la investigación en la web, desesperadamente en busca de material de referencia sobre las expresiones regulares (que, como se verá, es uno de los pilares para lograr obtener algunas contenido de otro sitio). Buscan aquí, en busca de allí para charlar con los laminados en Gevã Trato de entender mejor este tipo de expresiones regulares. Antes de eso, con ayuda de una pequeña "gambiarra", logró alcanzar mi meta.
La primera cosa a hacer es recoger todo el contenido de la página que desea "manipular". Con este fin utiliza, por ejemplo, la función file_get_contents (). Reproducción del contenido del sitio a una variable, sería así ( 'll hacer un ejemplo con el mismo emplazamiento que tenía que pasar):
1 | $ Url = file_get_contents ( 'http://www.bcb.gov.br/'); |
Listo, ahora contiene la variable $ url, cadena, todo el contenido de la página del BCB.
Expresiones regulares
Así que aquí era fácil, la difícil captura fue sólo la porción de la página que quería… Para ello, debe utilizar expresiones regulares!
Si usted no sabe cuáles son las expresiones regulares, vai un breve (e incompleto…) explicación de lo que son las expresiones regulares, de la Wikipedia:
Una expresión regular en Tecnología de la Información, define un estándar que se utilizará para buscar o sustitución de palabras o grupos de palabras. Es un deber hacer búsquedas de ciertas partes del texto.
Con las expresiones regulares es posible identificar fragmentos de palabras o grupos de palabras que coincidan con ( "partido") a un determinado nivel ( "patrón"), que es "regular".
El PHP tiene varias funciones nativas para trabajar con expresiones regulares. Sólo saber que cada uno sirve y el uso de meneira correcta.
Bueno, el siguiente paso hacia la solución del problema es identificar el patrón que desea extraer el sitio. En el caso, yo necesitaba una tabla con algunos tipos de cambio (está a la derecha, el sitio del BCB). Observando el código fuente, he visto que la información aparece en un cuadro (semánticamente correcto!); Por otra parte, este cuadro está rodeado entre los comentarios HTML "<! - - INDICADORES INICIO - ->" y "<! - - FIMINDICADORES -- --> ". Esta es una buena cosa, ya que facilita más bien a "identificar el patrón."
Explicando mejor: el modelo buscado en el caso, es todo lo que está entre los comentarios HTML "<! - - INDICADORES INICIO - ->" y "<! - - FIMINDICADORES - ->". Todo el cuadro está ahí, para mi felicidad! :-)
Entonces ¿Qué tenemos que hacer es utilizar una función de PHP (por caso, eligió el preg_match_all ()) para buscar una expresión regular dentro de la variable $ url, que contiene toda la primera página del sitio es donde la mesa.
Después de mucho tiempo de ensayo vááárias expresiones regulares, me llegó a la conclusión de que haría un pequeño mutreta. Pero en primer lugar, permítanme mostrar cómo el código es hasta ahora.
1 2 | $ Url = file_get_contents ( 'http://www.bcb.gov.br/'); preg_match_all ( '/ ORES - >(. )<!--/ s', $ url, $ contenido); |
Al explicar: el primer argumento de la función, es la norma que yo busco, la segunda, es donde voy a tratar y el tercero, de guardia en una serie todas las ocurrencias de los términos buscados. Para la mayoría de los casos, puede haber sido buena, aquí, pero he tenido ningún problema, todavía hay unos más líneas de código.
Actualmente, la variable $ contenido contiene un array con las ocurrencias. El uso de un print_r (), descubierto en qué posición, exactamente lo que yo estaba buscando: $ contenido [0] [0].
Realización de una "mutreta"
Para hacer esta "mutreta", el juego contenido de la matriz de posición a otra variable (para facilitar la manipulación).
1 2 3 | $ Url = file_get_contents ( 'http://www.bcb.gov.br/'); preg_match_all ( '/ ORES - >(. )<!--/ s', $ url, $ contenido); dólares pantalla = $ Contenido [0] [0]; |
Hubo fragmentos de lo que fue devuelta (es decir, la tabla con el tipo de cambio de divisas) que no desea que aparezca en el sitio (como algunos enlaces). Así que tomé la decisión de retirarlas de la función str_replace (), que sustituye a porciones de cadenas. Es posible, como argumento, pasar un array. Así que por el momento, y llegando al final, el código es la siguiente:
1 2 3 4 5 | $ Url = file_get_contents ( 'http://www.bcb.gov.br/'); preg_match_all ( '/ ORES - >(. )<!--/ s', $ url, $ contenido); dólares pantalla = $ Contenido [0] [0]; retirar $ = array ( "la mayoría de las divisas', 'Copom minutos',' más', 'ORES ->','<!--'); $ display = str_replace ( $ Retirar,'', $ pantalla); |
En otras palabras, cuando algunos de los elementos que aparecen en el array $ retirar una pantalla de dólares, será reemplazada por "" (nada…). Tenga en cuenta que los dos últimos elementos de la matriz son "la contaminación" innecesarias, que entró debido a mi pereza para hacer una expresión regular más elaborado. :-)
Por último…
Después de eso, sólo mandar mostrar en la pantalla que "sobrou" cortar el contenido de la página inicial del sitio BCB.
1 2 3 4 5 6 | $ Url = file_get_contents ( 'http://www.bcb.gov.br/'); preg_match_all ( '/ ORES - >(. )<!--/ s', $ url, $ contenido); dólares pantalla = $ Contenido [0] [0] </ span>; retirar $ = array ( "la mayoría de las divisas', 'Copom minutos',' más', 'ORES ->','<!--') dólares display = str_replace ($ retirar,'', $ pantalla); echo $ mostrar; |
Y si el servidor no permite la función file_get_contents ()?
Hay muchos servidores que, por diversas razones (principalmente la "seguridad"), no permiten utilizar la función file_get_contents (). Para estos casos, es posible colocar una variable externa de cualquier página con el siguiente código (después de pedir explicaciones en el manual oficial de PHP):
1 2 3 4 5 6 7 | $ Ch = curl_init (); $ timeout = 0; curl_setopt ($ ch, CURLOPT_URL, 'O_SITE_QUE_VOCE_QUER'); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ ch, CURLOPT_CONNECTTIMEOUT, $ timeout); $ content = curl_exec ( $ Ch); curl_close ($ ch); |
A continuación, el contenido de la página "O_SITE_QUE_VOCE_QUER" estará en la variable $ contenido.
Conclusión
Luego, el personal, para retirar una parte de los contenidos de un sitio web (con PHP), los pasos son los siguientes:
- Aprender que la página es que el contenido es exacto;
- Juega el contenido del sitio a una variable;
- Extracto de las palabras que desea utilizar expresiones regulares;
- Si es necesario, cortar algunas cosas más el resultado de las ER;
- Display en pantalla el resultado final.
El gran salto del gato en este caso es si se ocupan de expresiones regulares; cosa, me informan, pero se aprende haciendo! Y haciendo mucho! Lea las referencias al final de este artículo y encontrar más material en la Internet acerca de ello.
Otra cosa importante es: por favor, tenga en cuenta que como usted está tomando el contenido de un sitio donde ese cambio su estructura, más probable será necesario cambiar la expresión regular, también.
Tenga en cuenta de una cosa: si usted, desarrollador web, aún no se especifica el uso de expresiones regulares, puede estar seguro de que llegado su hora vai!
Referencias nacionales
Las expresiones regulares - Guía rápida de consulta
Esta es la guía de Aurelio Marino Jargas, excelente para aprender expresiones regulares y consultar en tiempo de endurecimiento!
Las expresiones regulares en PHP
Artículo de la Vida Humana en el Linux, Marcelo Santos Araujo, con una introducción a las expresiones regulares.
Referencias Internacional
Sitio dedicado a las expresiones regulares.
Biblioteca de expresiones regulares
Biblioteca Virtual de expresiones regulares.
Para poner a prueba las expresiones regulares en tiempo real!









Excelente, sr.Tárcio! ¿Tienes un limón y una limonada. El artículo fue muy bueno, ¡felicidades!
Gracias, Su Gevã!
50% es su crédito! D =
Abraços!
Recuerde que con la utilización de XHTML páginas en la estructura de esto es innecesario, ya que la extracción de datos puede hacerse exactamente de la misma manera que los extractos de datos de un XML.
Rafael Eduardo @ KASSNER
Hola, Rafael, OK?
Muy interesante el hecho de que usted ha mencionado! Podría servir de ejemplo para que podamos aprender?
Abraços!
Gracias a mano!
Las personas que quieren profundizar, vai existe un gran vínculo en ER:
http://guia-er.sourceforge.net/
Para mí fue muy útil!
Juliano @
Gracias por recordarnos el sitio de Aurelio. Mejor incluso comprar el libro es la referencia que hizo, pero para consultas en línea, es muy bueno!
Gracias por su visita!