Foros del Web » Programando para Internet » PHP »

leer un archivo y buscar contenido entre etiquetas HTML

Estas en el tema de leer un archivo y buscar contenido entre etiquetas HTML en el foro de PHP en Foros del Web. no tengo ni diea de cómo hacerlo. Lo que quiero hacer es lo siguiente: quiero que un script PHP me lea el contenido de un ...
  #1 (permalink)  
Antiguo 15/08/2007, 06:44
Avatar de sumolari  
Fecha de Ingreso: mayo-2006
Ubicación: localhost
Mensajes: 1.367
Antigüedad: 17 años, 11 meses
Puntos: 18
leer un archivo y buscar contenido entre etiquetas HTML

no tengo ni diea de cómo hacerlo. Lo que quiero hacer es lo siguiente: quiero que un script PHP me lea el contenido de un archivo de una web (el fódigo HTML) y me copie el contenido entre diversas etiquetas.
Ejemplo: tengo una tabla
Código HTML:
<table>
    <tr>
         <td>Nombres</td>
         <td>Apellidos</td>
    </tr>
     <tr>
         <td>Juan</td>
         <td>Pérez</td>
     </tr>
</table> 
Quiero que me lea el contenido de la tabla de las filas inferiores a la de Nombre y Apellidos.
En todos los casos sólo habrá uan fila por debajo de esta. Quiero que es contenido de cada celda me lo ponga en variables diferentes
Ejemplo
Código PHP:
<?php
$tabla_nombresapellidos_nombre 
=  Juan
$tabla_nombresapellidos_apellidos 
Pérez
?>
¿Para que sirve? Pues lo quiero usar para cargar los datos que hay en la página del censo francés para crear tablas para el proyecto de la Wikipedia Francia. Con lo cual conseguiré que estén menos tiempo creando cantones y comunas, generando dinámicamente el contenido de los artículos.

Gracias por vuestra ayuda.
  #2 (permalink)  
Antiguo 15/08/2007, 08:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: leer un archivo y buscar contenido entre etiquetas HTML

Puedes usar la extension DOM de PHP para cargar el documento y si tu documento HTML es valido (la sintaxis) navegar por el documento como si fuera un arbol DOM.

Saludos.
  #3 (permalink)  
Antiguo 15/08/2007, 10:30
Avatar de sumolari  
Fecha de Ingreso: mayo-2006
Ubicación: localhost
Mensajes: 1.367
Antigüedad: 17 años, 11 meses
Puntos: 18
Re: leer un archivo y buscar contenido entre etiquetas HTML

He probado, me da un error, el código fuente es
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<?php

$doc 
= new DOMDocument();
$doc->loadHTMLFile("http://www.google.es");
print 
$doc->saveHTML();
?> 
</body>
</html>
y el error

Cita:
Fatal error: Cannot instantiate non-existent class: domdocument in g:\servidor\www\wikipedia\dom.php on line 11


¿Me puedes explicar cómo funciona el DOM? Es que no lo cojo, la verad es que mi inglés deja mucho que desear...

Gracias por tu ayuda
  #4 (permalink)  
Antiguo 15/08/2007, 10:36
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: leer un archivo y buscar contenido entre etiquetas HTML

Te esta diciendo que no existe la clase DOMDocument, esto es porque seguramente no tienes activada la extension DOM en tu php.ini.

Saludos.
  #5 (permalink)  
Antiguo 15/08/2007, 10:48
Avatar de sumolari  
Fecha de Ingreso: mayo-2006
Ubicación: localhost
Mensajes: 1.367
Antigüedad: 17 años, 11 meses
Puntos: 18
Re: leer un archivo y buscar contenido entre etiquetas HTML

Bien, la he activado (domxml, que era la única que tenía la palabra dom).
Ahora da el siguiente error

Cita:

Warning: domdocument() expects at least 1 parameter, 0 given in g:\servidor\www\wikipedia\dom.php on line 11

Fatal error: Call to undefined function: loadhtmlfile() in g:\servidor\www\wikipedia\dom.php on line 12

  #6 (permalink)  
Antiguo 15/08/2007, 10:51
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: leer un archivo y buscar contenido entre etiquetas HTML

Te esta diciendo que el constructor DomDocument espera por lo menos un parametro (te recomiendo leer el manual para que sepas que parametro enviar), mas abajo te dice que la funcion loadHTMLFile no existe y no es parte del objeto DomDocument.

Saludos.
  #7 (permalink)  
Antiguo 15/08/2007, 11:07
Avatar de sumolari  
Fecha de Ingreso: mayo-2006
Ubicación: localhost
Mensajes: 1.367
Antigüedad: 17 años, 11 meses
Puntos: 18
Re: leer un archivo y buscar contenido entre etiquetas HTML

Ya he arreglado lo del primer error, pero no sé qué hacer para arreglar el segundo
  #8 (permalink)  
Antiguo 15/08/2007, 11:23
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: leer un archivo y buscar contenido entre etiquetas HTML

Que version de PHP manejas?

Saludos.
  #9 (permalink)  
Antiguo 15/08/2007, 11:39
Avatar de sumolari  
Fecha de Ingreso: mayo-2006
Ubicación: localhost
Mensajes: 1.367
Antigüedad: 17 años, 11 meses
Puntos: 18
Re: leer un archivo y buscar contenido entre etiquetas HTML

La cuatro, uso easyphp 1.8
  #10 (permalink)  
Antiguo 15/08/2007, 11:43
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: leer un archivo y buscar contenido entre etiquetas HTML

En la version 4 la extension DOM no tiene loadHTMLfile, necesitas usar entonces la extension DOM XML, que no es tan poderosa como la nueva.

Saludos.
  #11 (permalink)  
Antiguo 15/08/2007, 11:54
Avatar de sumolari  
Fecha de Ingreso: mayo-2006
Ubicación: localhost
Mensajes: 1.367
Antigüedad: 17 años, 11 meses
Puntos: 18
Re: leer un archivo y buscar contenido entre etiquetas HTML

Según parece hay que usar archivos XML como fuente de datos. La fuente del censo está en ASP.

Bueno, he usado este código:

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Documento sin t&iacute;tulo</title>
</head>

<body>
<?php
$indent 
"";
$file "index.php";

$showfile file_get_contents("http://www.forosdelweb.com" "/" $file);  // whatever path
   // maybe the whole path is not important, look it up in other posts

$newstring=utf8_encode($showfile);          // it's important!
if(!$domDocument domxml_open_mem($newstring)) {
   echo 
"Couldn't load xml...";   
   exit;
}

$rootDomNode $domDocument->document_element();
print 
"<pre>";
printElements($rootDomNode);
print 
"</pre>";

function 
printElements($domNode)
{
  if(
$domNode)
  {
    global 
$indent;
   
    if(
$domNode->node_type() == XML_ELEMENT_NODE)
    {
      print 
"<br />".$indent."&lt;".$domNode->node_name();
      if(
$domNode->has_attributes())
      {
        
$attributes $domNode->attributes();
        foreach(
$attributes as $domAttribute)
        {
          print 
" $domAttribute->name=\"$domAttribute->value\"";
        }
      }
      print 
"&gt;";
      if(
$domNode->has_child_nodes())
      {
        
$indent.="  ";
        
$nextNode $domNode->first_child();
        
printElements($nextNode);
        
$indentsubstr($indent0strlen($indent)-2);
        print 
"<br />".$indent."&lt;"."/".$domNode->node_name()."&gt;";
      }
      else
      {
        print 
"$domNode->node_value()&lt;/".$domNode->node_name()."&gt;";
      }                       
    }
   
    
$nextNode $domNode->next_sibling();
    
printElements($nextNode);
  }
}
?>
</body>
</html>
Edito: Usar foros delweb de fuente no es buena idea, tiene mucho codigo, así que voy a usar mi web
  #12 (permalink)  
Antiguo 15/08/2007, 12:00
Avatar de sumolari  
Fecha de Ingreso: mayo-2006
Ubicación: localhost
Mensajes: 1.367
Antigüedad: 17 años, 11 meses
Puntos: 18
Re: leer un archivo y buscar contenido entre etiquetas HTML

Y el resultado es este:
Código PHP:

<html>
  <
head>
    <
meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

Notice:  Undefined property:  node_value in g:servidorwwwwikipediadom.php on line 55

()</meta>
    <
title>
    </
title>
    <
meta http-equiv="refresh" content="0;url=http://www.sumolari.com/themes/grey_tab/">

Notice:  Undefined property:  node_value in g:servidorwwwwikipediadom.php on line 55

()</meta>
  </
head>
  <
body>
  </
body>
</
html
  #13 (permalink)  
Antiguo 15/08/2007, 12:15
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: leer un archivo y buscar contenido entre etiquetas HTML

Te esta diciendo que algunos de los nodos que estas leyendo no tienen el atributo de value.

Saludos.
  #14 (permalink)  
Antiguo 15/08/2007, 12:30
Avatar de sumolari  
Fecha de Ingreso: mayo-2006
Ubicación: localhost
Mensajes: 1.367
Antigüedad: 17 años, 11 meses
Puntos: 18
Re: leer un archivo y buscar contenido entre etiquetas HTML

Bien, ¿hay manera de arreglar ese error o no mostrarlo? Además de eso, ¿cómo puedo hacer que grabe datos detrás de etiquetas específicas?
  #15 (permalink)  
Antiguo 15/08/2007, 13:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: leer un archivo y buscar contenido entre etiquetas HTML

Para no mostrar el error solo es cuestion de usar @ antes de accesar a la propiedad, y no entiendo tu otra pregunta, de grabar datos.

Saludos.
  #16 (permalink)  
Antiguo 15/08/2007, 13:34
Avatar de sumolari  
Fecha de Ingreso: mayo-2006
Ubicación: localhost
Mensajes: 1.367
Antigüedad: 17 años, 11 meses
Puntos: 18
Re: leer un archivo y buscar contenido entre etiquetas HTML

Me explicaré mejor.

El wikiproyecto francia va muy lento. Le gustaría poder crear artículos más rápidamente. ¿Cómo sé eso? Pues fácil, conozco gente del proyecto. Sacan los datos de la web del censo de francia (insee). Lo que ellos quieren es crear artículos cogiendo los datos de la web de insee automáticamente. He visto que la página que muestra los datos demográficos del insee es siempre "igual". Me explico, tienen una página y dependiendo de uan variable que envían por url (un código de 5 cifras que el wikipedista especificará) carga desde la base de datos los datos para rellenar la tabla. Lo que yo quiero hacer es que mi script con la variable de 5 cifras que le darán (o bien por url o bien por un formulario) acceda a la página de insee especificando el código de 5 cifras (el que ya le dio el wikipedista) y coja los datos que son dinámico (la segunda fila de cada tabla) y meta cada variable un una plantilla para crear artículos sobre francia, de manera que con especificar las 5 cifras el script rellene la plantilla.

He creado ya un pequeño script que con rellenar un formulario ya te crea el código que has de meter en la wikipedia (el texto). El problema es que no sé como coger los datos de la web del insee, ya que no puedo acceder a su base de datos. Necesito que lea el archivo y meta cada dato dinámico en su sitio.
Como yo tengo la plantilla decía de meterlo en variables ($variable_loquesea) para que yo ya crease la plantilla que se rellena de manera dinámica.

Gracias por tu ayuda
  #17 (permalink)  
Antiguo 15/08/2007, 14:46
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: leer un archivo y buscar contenido entre etiquetas HTML

Eso si lo comprendi, pero dices especificamente:
Cita:
Iniciado por sumolari Ver Mensaje
Bien, ¿hay manera de arreglar ese error o no mostrarlo? Además de eso, ¿cómo puedo hacer que grabe datos detrás de etiquetas específicas?
A que te refieres con que grabe datos detras de etiquetas especificas?

Saludos.
  #18 (permalink)  
Antiguo 16/08/2007, 00:02
Avatar de sumolari  
Fecha de Ingreso: mayo-2006
Ubicación: localhost
Mensajes: 1.367
Antigüedad: 17 años, 11 meses
Puntos: 18
Re: leer un archivo y buscar contenido entre etiquetas HTML

Bien, quiero extraer datos del insee, la página onde están los datos es:
http://www.recensement.insee.fr/RP99...od=ALL&lang=FR
Si nos fijamos en la URL veremos la variables codgeo. Es variable es la que especifica que datos mostrar. La estructura de la página no varía. Aquí viene lo que quiero hacer:
Código HTML:
<table BORDER="1" RULES="ALL" CELLPADDING="2" BGCOLOR="#FFFFFF" BORDERCOLOR="#FFFFFF" CELLSPACING="0" WIDTH="100%"  >
  <tr BGCOLOR="#336699">
    <td colspan="6"><FONT SIZE="3" COLOR="#FFFFFF"><B>Evolution de la population</B></FONT></td>
 </tr>
  <tr BGCOLOR="#336699" align="center">
    <td  width="25%"><FONT SIZE="2" COLOR="#FFFFFF">&nbsp; </FONT></td>
    <td  width="15%"><FONT SIZE="2" COLOR="#FFFFFF">1968 </FONT></td>
    <td  width="15%"><FONT SIZE="2" COLOR="#FFFFFF">1975 </FONT></td>
    <td  width="15%"><FONT SIZE="2" COLOR="#FFFFFF">1982 </FONT></td>
    <td  width="15%"><FONT SIZE="2" COLOR="#FFFFFF">1990 </FONT></td>
    <td  width="15%"><FONT SIZE="2" COLOR="#FFFFFF">1999 </FONT></td>
  </tr>
  <tr ALIGN="RIGHT">
    <td ALIGN="LEFT"><FONT SIZE="2"> Population sans doubles comptes </FONT></td>
    <td > <FONT SIZE="2"> 510 </FONT></td>
    <td > <FONT SIZE="2"> 444 </FONT></td>
    <td > <FONT SIZE="2"> 470 </FONT></td>
    <td > <FONT SIZE="2"> 482 </FONT></td>
    <td > <FONT SIZE="2"> 447 </FONT></td>
 </tr>
   
</table> 
Esa tabla es siempre igual. Yo quiero coger los datos de las celdas de la 2ª y 3ª fila, es decir: 1968, 1975, 1982, 1990, 1999, 510, 444, 470, 482, 447.
Y que los almacene en variables, por ejemplo, en este caso son años y población de diferentes censos, así que usaría las variables $a1, $a2, $a3, $a4, $a5, $a6, $c1, $c2, $c3, $c4, $c5, $c6.

Tampoco me importa si coge todo el texto que hay en todas las celdas de la página, pues me bastaría con no poner esa variable en la plantilla.

Cuando supiese cómo sacar valores de una tabla de un archivo ajeno ya podría comenzar a hacer más cosas, ya que su fuente n o es sólo insee, hay más páginas, pero con una base ya puedo empezar.

Muchas gracias GatorV
  #19 (permalink)  
Antiguo 16/08/2007, 08:26
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: leer un archivo y buscar contenido entre etiquetas HTML

Puedes usar el DOMElement->value, para sacar el valor del nodo, solo compara con el DOMElement->type para que sepas que tipo de nodo es.

Saludos.
  #20 (permalink)  
Antiguo 16/08/2007, 08:49
Avatar de sumolari  
Fecha de Ingreso: mayo-2006
Ubicación: localhost
Mensajes: 1.367
Antigüedad: 17 años, 11 meses
Puntos: 18
Re: leer un archivo y buscar contenido entre etiquetas HTML

Bien, sustituí del código PHP
Código PHP:
        print "$domNode->node_value()&lt;/".$domNode->node_name()."&gt;"
Por:
Código PHP:
        print "$domNode->type()&lt;/".$domNode->node_name()."&gt;"
Y el error desapareció
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 10:35.