Foros del Web » Programando para Internet » PHP »

Sacar informacion de un fichero HTML

Estas en el tema de Sacar informacion de un fichero HTML en el foro de PHP en Foros del Web. Buenas a todos! Lo primero agradecer la gran comunidad que teneis formada, que me resuelve miles de dudas. Ahora, paso a la pregunta de rigor, ...
  #1 (permalink)  
Antiguo 17/06/2009, 10:30
 
Fecha de Ingreso: julio-2008
Mensajes: 31
Antigüedad: 15 años, 9 meses
Puntos: 0
Sacar informacion de un fichero HTML

Buenas a todos!
Lo primero agradecer la gran comunidad que teneis formada, que me resuelve miles de dudas. Ahora, paso a la pregunta de rigor, necesito hacer un volcado de unos datos que se encuentran todos en paginas con la misma estructura, pero no logro hacerlo, el codigo del fichero html es el sigioente:
Código HTML:
<html>

<head>
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Muestra de 100 canciones. Comarca de la Serena</title>
</head>

<body bgcolor="#D5E6BB">

<TABLE BORDER=1 BGCOLOR=#EBEBEB CELLSPACING=5 cellpadding="5" width="100%" bordercolor="#008000" style="border-collapse: collapse">

<THEAD>
<TR>
<TH BGCOLOR=#B2CCE5 BORDERCOLOR=#000000 colspan="8" width="100%" >

<table border="0" cellpadding="2" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber19" height="1" bgcolor="#E7E8A5">
  <tr>
    <td width="89%" height="23" bgcolor="#B2CCE5">
    <p align="left">
  <font face="Arial Black" style="font-size: 9pt" color="#008000">&nbsp;</font><font face="Arial Black" style="font-size: 9pt">Localidad:</font><b><font face="Arial Black" style="font-size: 11pt"> 
  VALLE DE LA SERENA</font></b></td>
  </tr>
</table>
  </TH>

</TR>
<TR>
<TH BGCOLOR=#FFE4C4 BORDERCOLOR=#000000 width="60" >
<font face="Arial" style="font-size: 9pt" color="#800000">Tipología</font></TH>
<TH BGCOLOR=#FFE4C4 BORDERCOLOR=#000000 width="63" >
<font face="Arial" style="font-size: 9pt" color="#800000">Título</font></TH>
<TH BGCOLOR=#FFE4C4 BORDERCOLOR=#000000 width="38" >
<font face="Arial" style="font-size: 9pt" color="#800000">Fuente</font></TH>
<TH BGCOLOR=#FFE4C4 BORDERCOLOR=#000000 width="109" >
<font face="Arial" style="font-size: 9pt" color="#800000">Informante</font></TH>
<TH BGCOLOR=#FFE4C4 BORDERCOLOR=#000000 width="307" >
<font face="Arial" style="font-size: 9pt" color="#800000">Texto</font></TH>
<TH BGCOLOR=#FFE4C4 BORDERCOLOR=#000000 width="132" >
<FONT style=FONT-SIZE:9pt FACE="Arial" COLOR=#800000>
Partitura</FONT></TH>
<TH BGCOLOR=#FFE4C4 BORDERCOLOR=#000000 width="116" >
<font face="Arial" style="font-size: 9pt" color="#800000">Audio / Vídeo</font></TH>
<TH BGCOLOR=#FFE4C4 BORDERCOLOR=#000000 width="243" >
<font face="Arial" style="font-size: 9pt" color="#800000">Observaciones</font></TH>

</TR>
</THEAD>
<TBODY>
<tr>
  <td BORDERCOLOR="#c0c0c0" valign="top"><font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000">Política</font></td>
  <td BORDERCOLOR="#c0c0c0" valign="top"><font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000">Galán y Hernández</font></td>
  <td BORDERCOLOR="#c0c0c0" valign="top"><font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000">Inédita</font></td>
  <td BORDERCOLOR="#c0c0c0" valign="top"><font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000">Inés Valor</font></td>
  <td BORDERCOLOR="#c0c0c0" valign="top"><textarea style="WIDTH: 270; height:150" name="S1" rows="5" cols="69">
En el año treinta, mes de diciembre
a Galán y Hernandez se fusiló
por tener idea republicana
que es la más sana de la nación

Viva Galán y Hernández
Queipo de Llano
que con Franco se muestran republicanos

Viva Galán Zamora, -Rada y Domingo
y el campitán Rediles,
que, aunque lo fusilen,
siempre será el mismo.</textarea></td>
  <td BORDERCOLOR="#c0c0c0" valign="top">&nbsp;</td>
  <td BORDERCOLOR="#c0c0c0" valign="top"><u><font style="FONT-SIZE:9pt" FACE="Arial" COLOR="#0000ff"><a href="valleserena/enelaño30.wma">Audición</a></font></u></td>
  <td BORDERCOLOR="#c0c0c0" valign="top"><font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000">Son algunas de las canciones que se hacen con fines políticos, ideológicos, de protesta, de determinadas épocas.</font></td>
</tr>
<tr>
  <td BORDERCOLOR="#c0c0c0" valign="top"><font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000">Política</font></td>
  <td BORDERCOLOR="#c0c0c0" valign="top"><font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000">Asturias</font></td>
  <td BORDERCOLOR="#c0c0c0" valign="top"><font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000">Inédita</font></td>
  <td BORDERCOLOR="#c0c0c0" valign="top"><font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000">Inés Valor</font></td>
  <td BORDERCOLOR="#c0c0c0" valign="top"><textarea style="WIDTH: 260; height:150" name="S1" rows="5" cols="69">
Primero de mayo florido
tierra luz y libertad
y a estos jóvenes queridos
venimos a saludar

Saludos de redención
vispera de un mundo nuevo
gritemos revolución 
viva salud compañeros
comperos viva asturias
y todos los asturianos
viva, viva el socialismo
y vivan los asturianos</textarea></td>
  <td BORDERCOLOR="#c0c0c0" valign="top">&nbsp;</td>
  <td BORDERCOLOR="#c0c0c0" valign="top"><u><font style="FONT-SIZE:9pt" FACE="Arial" COLOR="#0000ff"><a href="valleserena/primerodemayo.wma">Audición</a></font></u></td>
  <td BORDERCOLOR="#c0c0c0" valign="top"><font style="FONT-SIZE:10pt" FACE="Arial" COLOR="#000000"><br>&nbsp;</font></td>
</tr>
</TBODY>
<TFOOT></TFOOT>
</TABLE>
        
<p>&nbsp;</p>
        
</body>

</html> 
Lo que necesito procesar son cada una de las columnas de la tabla, en este caso la tabla está compuesta por dos filas con 8 columnas cada una.
Necesito tomar los datos de las columnas de cada fila, de manera, que por ejemplo para la primera fila, tuviera por ejemplo:
Código PHP:
$Tipologia="Política";
$Titulo="Galán y Hernández";
$Fuente="Inédita";
$Informante="Inés Valor";
$Texto="En el año treinta, mes de diciembre
a Galán y Hernandez se fusiló
por tener idea republicana
que es la más sana de la nación

Viva Galán y Hernández
Queipo de Llano
que con Franco se muestran republicanos

Viva Galán Zamora, -Rada y Domingo
y el campitán Rediles,
que, aunque lo fusilen,
siempre será el mismo."
;
$Partitura="";
$Audio="valleserena/enelaño30.wma";
$Observaciones="Son algunas de las canciones que se hacen con fines políticos, ideológicos, de protesta, de determinadas épocas"
Estos datos sería almacenados en la base de datos, y posteriormente procesada la siguiente fila de la tabla.
El problema es que no se como hacerlo, ahora estoy con Dom html, pero no se como hacer para recorrer las filas de la tabla.
Un saludo, y por dios espero que alguien me pueda echar un cable
  #2 (permalink)  
Antiguo 17/06/2009, 10:33
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Sacar informacion de un fichero HTML

El HTML del cual quieres obtener la información es tuyo o ajeno? No te lo pregunto por temas legales, es que dependiendo de la respuesta te puedo sugerir una cosa.

Saludos!
  #3 (permalink)  
Antiguo 17/06/2009, 10:44
 
Fecha de Ingreso: julio-2008
Mensajes: 31
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Sacar informacion de un fichero HTML

Cita:
Iniciado por Synkronice Ver Mensaje
El HTML del cual quieres obtener la información es tuyo o ajeno? No te lo pregunto por temas legales, es que dependiendo de la respuesta te puedo sugerir una cosa.

Saludos!
Estoy trabajando en un PFC de la universidad y sí, es nuestro, solo que estamos cambiando y portando todo el codigo antiguo hecho a base de html estatico a una base de datos.
  #4 (permalink)  
Antiguo 17/06/2009, 11:46
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Sacar informacion de un fichero HTML

Con esto se supone que obtendriamos un objeto de tipo DOMElement que representa a la tabla donde tienes las filas...

Código PHP:
<?php
$gestor 
fopen("http://localhost/archivo.html""r");
$html_string fread  ($gestor);
$doc = new DOMDocument();
$doc->loadHTML($html_string);
$tabla $doc->getElementById('AutoNumber19');
?>
Mas info en ... http://es.php.net/manual/es/class.domdocument.php
  #5 (permalink)  
Antiguo 17/06/2009, 11:56
 
Fecha de Ingreso: julio-2008
Mensajes: 31
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Sacar informacion de un fichero HTML

y como recupero los valores de de cada de las filas y columnas? viendo el el enlace que mas puesto, no encuentro nada para obtener el valor de un nodo en concreto ni para recorrer el arbol. Aun así gracias por responder!!
  #6 (permalink)  
Antiguo 17/06/2009, 12:07
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Sacar informacion de un fichero HTML

Prueba a ver

Código PHP:
<?php
$gestor 
fopen("/home/rasmus/archivo.txt""r");
$html_string fread  ($gestor);
$doc = new DOMDocument();
$doc->loadHTML($html_string);
$tabla $doc->getElementById('AutoNumber19');
$filas $tabla->getElementsByTagName('tr');
$datos = array();
foreach (
$filas as $key => $fila){
   
$celdas $fila->childNodes;
   foreach(
$celdas as $celda)
   {
           
$datos[$key] = $celda->textContent;
   }
}

// A ver si hemos capturado informacion 

echo "<pre>";
var_dump($datos);
echo 
"</pre>";
?>
Ten en cuenta que no he podido probarlo y es la primera vez que utilizo DOM HTML.
  #7 (permalink)  
Antiguo 17/06/2009, 12:22
 
Fecha de Ingreso: julio-2008
Mensajes: 31
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Sacar informacion de un fichero HTML

Buenas synkronice, me da el siguiente error:

Fatal error: Call to a member function getElementsByTagName() on a non-object in D:\serv\datos\www2\userfiles\volcado\prueba.php on line 13

Asique no podemos comprobar si el resto del codigo funciona, alguien sabe porque da este error?
  #8 (permalink)  
Antiguo 17/06/2009, 12:27
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Sacar informacion de un fichero HTML

Haz un var_dump de la variable $tabla y pegame lo que te devuelve.
  #9 (permalink)  
Antiguo 17/06/2009, 12:37
 
Fecha de Ingreso: julio-2008
Mensajes: 31
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Sacar informacion de un fichero HTML

Código PHP:
$gestor fopen("paginashmtl/valleserena.HTM""r");
    
$html_string fread($gestor,filesize("paginashmtl/valleserena.HTM"));
    
$doc = new DOMDocument();
    
$doc->loadHTML($html_string);
    
$tabla $doc->getElementById('AutoNumber19');
    echo 
"<pre>";
    
var_dump($tabla);
    echo 
"</pre>"
al hacer el var_dump muestra NULL

He probado tambien antes de hacer el var dump de tabla, hacer un var_dump de html_string y se muestra correctamente todo el codigo html, asique no entiendo porque no funciona....aun asi te sigo agradeciendo tu ayuda!
  #10 (permalink)  
Antiguo 17/06/2009, 12:38
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Sacar informacion de un fichero HTML

En la primera linea del codigo que has puesto dentro de fopen??
  #11 (permalink)  
Antiguo 17/06/2009, 12:47
 
Fecha de Ingreso: julio-2008
Mensajes: 31
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Sacar informacion de un fichero HTML

La ruta del fichero html, porque tengo la pagina tambien en el servidor local almacenada.
  #12 (permalink)  
Antiguo 17/06/2009, 12:50
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Sacar informacion de un fichero HTML

Ok, estoy realizando pruebas, en mi servidor. Te digo algo cuando consiga resultados.
  #13 (permalink)  
Antiguo 17/06/2009, 12:55
 
Fecha de Ingreso: julio-2008
Mensajes: 31
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Sacar informacion de un fichero HTML

Ok, synkronice, te lo agradezco mucho!! yo estoy tambien haciendo pruebas a ver si entre los dos sacamos algo en claro.
Si quieres la url del archivo es esta: http[://]nuestramusica.unex.es/nuestra_musica/bd_serena/valleserena.htm
  #14 (permalink)  
Antiguo 17/06/2009, 13:25
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Sacar informacion de un fichero HTML

Ya lo tengo

Código PHP:
<?php
header 
('Content-type: text/html; charset=utf-8');
$doc = new DOMDocument();
$result $doc->loadHTMLFile('tabla.html');
$tbody $doc->getElementsByTagName('tbody');

$celdas $tbody->item(0)->getElementsByTagName('td');
$total_celdas $celdas->length;
$celdas_por_fila 8;
$datos = array();
$contador_filas 0;
$fila_actual 0;
for(
$i 0$i $total_celdas$i++)
{    
    
$celda $celdas->item($i);
    
$datos[$fila_actual][] = $celda->textContent;
    if(
$contador_filas >= $celdas_por_fila)
    {
        
$contador_filas 0;
        
$fila_actual++;
    }
    else
    {
    
$contador_filas++;
    }
}

// A ver si hemos capturado informacion 

echo "<pre>";
var_dump($datos);
echo 
"</pre>";
?>

Última edición por Synkronice; 17/06/2009 a las 13:43 Razón: Mejorado el codigo para almacenar correctamente en el array
  #15 (permalink)  
Antiguo 17/06/2009, 13:49
 
Fecha de Ingreso: julio-2008
Mensajes: 31
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Sacar informacion de un fichero HTML

Synkronice, no se que decirte, muchisimas gracias!!! estas echo un pedazo de maquina!!
Una unica pregunta, habría la posibilidad de coger por ejemplo de esta columna:
Código HTML:
<td BORDERCOLOR="#c0c0c0" valign="top"><u><font style="FONT-SIZE:9pt" FACE="Arial" COLOR="#0000ff"><a href="valleserena/enelaño30.wma">Audición</a></font></u></td> 
la url del fichero, "valleserena/enelaño30.wma" ?
Muchas gracias de nuevo, te lo agradezco muxo!!

PD: las funciones y la documentacion de DOM que usas donde las puedo encontrar?

Última edición por Ayuso; 17/06/2009 a las 14:05
  #16 (permalink)  
Antiguo 17/06/2009, 13:53
Avatar de Synkronice  
Fecha de Ingreso: octubre-2007
Ubicación: Madrid
Mensajes: 831
Antigüedad: 16 años, 6 meses
Puntos: 48
Respuesta: Sacar informacion de un fichero HTML

Claro que si se podría, pero ahora no puedo mirartelo, mañana por la tarde te digo algo ok?
  #17 (permalink)  
Antiguo 17/06/2009, 15:02
 
Fecha de Ingreso: julio-2008
Mensajes: 31
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Sacar informacion de un fichero HTML

Cita:
Iniciado por Synkronice Ver Mensaje
Claro que si se podría, pero ahora no puedo mirartelo, mañana por la tarde te digo algo ok?
Ok, pos mucha gracias campeón!! ya mañana me cuentas como se puede hacer lo de los <a herf>, aunque miraré a ver si consigo hacerlo, si lo hiciera, ya postearía aquí el resultado. Pos lo dicho que gracias!.
Edit: veo que has modificado el codigo, ahora funciona perfect!! un 10 para ti Synkronice!!
  #18 (permalink)  
Antiguo 17/06/2009, 17:24
 
Fecha de Ingreso: julio-2008
Mensajes: 31
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Sacar informacion de un fichero HTML

Buenas Synkronice!
ya he conseguido sacar el valor de los enlaces, pongo el codigo por si a alguien le puede resulltar interesante.
Código PHP:
    header ('Content-type: text/html; charset=utf-8');
    
$doc = new DOMDocument(); 
    
$result $doc->loadHTMLFile('paginashmtl/capilla.HTM'); 
    
$tbody $doc->getElementsByTagName('tbody'); 
    
$celdas $tbody->item(0)->getElementsByTagName('td'); 
    
$total_celdas $celdas->length
    
$celdas_por_fila 7
    
$datos = array(); 
    
$contador_filas 0
    
$fila_actual 0
    for(
$i 0$i $total_celdas$i++){     
        
$celda $celdas->item($i); 
        if (
$contador_filas ==|| $contador_filas==6){
            
$a=$celdas->item($i)->getElementsByTagName('a');
            if (
$a->length>0)
                
$datos[$fila_actual][] = trim($a->item(0)->getAttribute('href')); 
            else
                
$datos[$fila_actual][] = $celda->textContent;     
        }
        else
            
$datos[$fila_actual][] = $celda->textContent

        if(
$contador_filas >= $celdas_por_fila){ 
            
$contador_filas 0
            
$fila_actual++; 
        } 
        else
            
$contador_filas++; 
    } 
    
// A ver si hemos capturado información  
    
echo "<pre>"
    
var_dump($datos); 
    echo 
"</pre>"
?> 
He cambiado el valor de la variable $celdas_por_fila a 7 para que funcionara correctamente. Bueno, pues agradecerte amigo todo el esfuerzo, pues sin ti ayuda, (bueno, que digo ayuda, te has currado tu el codigo, yo solo me dedicado a probarlo y añadirle lo de los enlaces) no lo hubiera solucionado. Un saludo y te debo unas cañas!!
Por cierto, tengo otras estructuras de paginas que tambien tengo que portar, si tengo una duda ya contactare contigo.
Un saludo!
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:12.