Foros del Web » Programando para Internet » PHP »

Obtener y analizar codigo fuente de una web en PHP

Estas en el tema de Obtener y analizar codigo fuente de una web en PHP en el foro de PHP en Foros del Web. Buenas a todos! Estoy intentando hacer una funcion en php que me obtenga el codigo fuente de una web q le paso por parametros y ...
  #1 (permalink)  
Antiguo 24/04/2011, 15:42
 
Fecha de Ingreso: diciembre-2010
Mensajes: 16
Antigüedad: 9 años, 5 meses
Puntos: 0
Obtener y analizar codigo fuente de una web en PHP

Buenas a todos!
Estoy intentando hacer una funcion en php que me obtenga el codigo fuente de una web q le paso por parametros y despues pueda analizar ese codigo fuente en la misma funcion php y ser capaz de quedarme por ejemplo solo con los titulos de una lista de películas.
Por ejemplo:
Imaginemos que el codigo es asi:

Código:
.
.
.
<h2>Indiana Jones</h2>
<a href=www.hhhhhhw.com>
<h2>Mafalda</h2>
.
.
.
Lo que quiero es poder ejecutar mi funcion y obtener como resultado:
Indiana Jones
Mafalda

Para obtener el codigo fuente utilizo $html=file_get_contents(url) pero a partir de ahí, no se como tratar el $html para hacer lo que os he dicho.

Podríais hecharme una mano???
Muchas gracias!
  #2 (permalink)  
Antiguo 24/04/2011, 16:24
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 11 años
Puntos: 1517
Respuesta: Obtener y analizar codigo fuente de una web en PHP

Podrias usar dom para recoger los elementos y tomar lo que quieras. Busca sobre xpath. Tambien podrias usar expresiones regulares.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 25/04/2011, 01:38
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 11 años, 1 mes
Puntos: 6
Respuesta: Obtener y analizar codigo fuente de una web en PHP

En principio lo que te recomiendo es que estudies la estructura de la página y si no es muy "engorrosa" separes lo que te sirve, que normalmente está dentro de una tabla o de un div, y así vayas filtrando la información que necesites por ejemplo con dom.

Cuando digo separar es que borres el resto, se puede hacer usando una cadena (larga para diferenciarla de las demás) con el inicio de la tabla, luego buscas su posición con strpos. igual al final, extraes el fragmento (entre inicio y final) y ya tienes menos "basura" para procesar, solo te quedaría sacar la información, lo mejor sería con DOM.

y ahora que lo pienso, puedes también tratar toda la web con DOM, extraer la tabla como DOMElement (Supongo que es una tabla, no lo afirmo) y así ir sacando lo que quieres. (Si no estoy mal, esto es más parecido a lo que dice abimaelrc)
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #4 (permalink)  
Antiguo 25/04/2011, 09:23
 
Fecha de Ingreso: diciembre-2010
Mensajes: 16
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Obtener y analizar codigo fuente de una web en PHP

Muchas gracias! He estado mirando acerca de XPAth y me ha resultado muy interesante ese método, pero no acabo de entenderlo del todo:
Para analizar el codigo:

Código:
<div>
   <ul>
       <h2>Indiana Jones</h2>
       <a href=www.hhhhhhw.com>
       <h2>Mafalda</h2>
   </ul>
</div>
Y obtener solo Indiana Jones y Mafalda, lo he hecho así:

Código:
      $html = file_get_contents('cualkierpagina');
     $dom = new DOMDocument(); // creamos un nuevo documento
      @$dom->loadHTML($html); // cargamos el código html
      // obtenemos todo de la pagina
      $xpath = new DOMXPath($dom);
      $h2s = $xpath->evaluate("//h2");
      for ($i = 0; $i <$h2s->length; $i++) {
             $href = $h2s->item($i);
             echo $href;
      }
Pero esto no me lo muestra por pantalla. Me sale un error. No se si nisiquiera en $href tengo una lista con los 2 nombres (Indiana Jones y Mafalda), y tampoco como visualizarla.

Sabéis qué error estoy cometiendo??
  #5 (permalink)  
Antiguo 25/04/2011, 10:29
 
Fecha de Ingreso: diciembre-2010
Mensajes: 16
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Obtener y analizar codigo fuente de una web en PHP

Ya se como obtener los h2

Código:
$html = file_get_contents('cualkierweb');
      $dom = new DOMDocument(); // creamos un nuevo documento
      @$dom->loadHTML($html); // cargamos el código html
      // obtenemos todo de la pagina
      $xpath = new DOMXPath($dom);
      $hrefs = $xpath->evaluate("//h2");
      for ($i = 0; $i <$hrefs->length; $i++) {
             $href = $hrefs->item($i);
             $res=$href->textContent;
             echo '<b>'.$res.'</b><br>';
      }
Hasta ahí perfecto, lo que pasa esque quiero complicar la cosa, y aqui me veo con muchas lagunas.

Imaginemos que tenemos una lista:

Código:
<ul>
   <h2>Titulo1</h2>
   <li>Algo1</li>
   <li>Algo2</li>
   <h2>Titulo2</h2>
   <li>Algo3</li>
   <li>Algo4</li>
</ul>
Como puedo hacer para obtener:

Titulo1
Algo1
Algo2

Titulo2
Algo3
Algo4

Si en el XPath escribo //ul lo q me devuleve es un string con todo el contenido junto, pero quiero que me lo devuelva separado y saber difernciar cuál es el titulo y cual el contenido. Por ejemplo para poner los titulos en negrita y el contenido dejarlo normal.

Sabriais como se podria hacer eso con XPath??
Muchisimas gracias a todos
  #6 (permalink)  
Antiguo 25/04/2011, 12:35
 
Fecha de Ingreso: diciembre-2010
Mensajes: 16
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Obtener y analizar codigo fuente de una web en PHP

Voy a abrir un nuevo tema ya que ahora mi duda es sobre xPath. Muchas gracias a todos!
http://www.forosdelweb.com/f18/duda-sobre-uso-xpath-906975/

Última edición por almensilla; 25/04/2011 a las 12:49

Etiquetas: fuentes
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 13:34.