Foros del Web » Programando para Internet » PHP »

Leer contenido entre etiquetas html

Estas en el tema de Leer contenido entre etiquetas html en el foro de PHP en Foros del Web. Hola, necesito sacar informacion de una pagina que esta en html que se renueva constantemente. Son 5 contenidos que los 5 justo (por suerte) estan ...
  #1 (permalink)  
Antiguo 06/06/2011, 11:35
 
Fecha de Ingreso: diciembre-2006
Mensajes: 294
Antigüedad: 17 años, 4 meses
Puntos: 2
Leer contenido entre etiquetas html

Hola, necesito sacar informacion de una pagina que esta en html que se renueva constantemente.

Son 5 contenidos que los 5 justo (por suerte) estan entre las mismas etiquetas

Esta entre <td style="width: 168px"> y </td>

Son 5, uno abajo de otro.

Como lo puedo hacer?

Gracias
  #2 (permalink)  
Antiguo 06/06/2011, 11:38
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Leer contenido entre etiquetas html

Con expresiones regulares (el menos recomendado), con DOM o SimpleXML (estos dos recomendados).
__________________
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 06/06/2011, 12:27
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Leer contenido entre etiquetas html

supongo que las opciones que da abimaelrc deben ser las mejores, sin embargo yo lo haría así:

Código PHP:
<?php 
for($f=0;$start=strpos($html,'<td style="width: 168px">');$f++){ //mientras exista esta etiqueta
    
$html=substr($html,$start+25); //tomas toda la cadena desde que se cierra el primer tag
    
$cont[$f]=substr($html,0,strpos($html,'</td>')); //hasta que se inicie el segundo tag
}
?>
de este modo te quedaría el contenido de la primera etiqueta en $cont[0], el segundo en $cont[1], luego $cont[2] y así hasta $cont[4].
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #4 (permalink)  
Antiguo 06/06/2011, 12:30
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Leer contenido entre etiquetas html

stramin, te recomiendo que leas sobre DOM o SimpleXML y vas a ver que con dos o tres líneas hasta prendes la luz de tu cuarto Bueno si tienes un sistema que lea un xml sí funcionaría
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 06/06/2011, 12:39
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Leer contenido entre etiquetas html

el problema es que a abimaelrc le gusta hacerse el misterioso con frases como:

"eso lo logras más fácilmente con insertWeirdAcronym"

pero no me sirve mucho que digamos XD

he revisado algunas funciones de DOM pero... sería mejor si pusieses algún código o ejemplo, sobretodo si es tan fácil como dices. XD
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #6 (permalink)  
Antiguo 06/06/2011, 12:53
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 10 meses
Puntos: 641
Respuesta: Leer contenido entre etiquetas html

es que abimael va unos años adelante de nosotros.

yo hubiera elegido las expresiones regulares,
  #7 (permalink)  
Antiguo 06/06/2011, 13:00
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Leer contenido entre etiquetas html

Algo así
Código PHP:
Ver original
  1. <?php
  2. $html = <<<HTML
  3. <html>
  4. <head>
  5. <title>FooBar</title>
  6. </head>
  7. <body>
  8. <table>
  9.     <tr>
  10.         <td>foo</td>
  11.         <td>bar</td>
  12.         <td>baz</td>
  13.         <td>candy</td>
  14.         <td>fruits</td>
  15.         <td>vegetables</td>
  16.     </tr>
  17. </table>
  18. </body>
  19. </html>
  20. HTML;
  21.  
  22. $doc = new DOMDocument();
  23. $doc->loadHTML($html);
  24. foreach($doc->getElementsByTagName('td') as $v){
  25.     echo $v->firstChild->nodeValue . '<br />';
  26. }
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #8 (permalink)  
Antiguo 06/06/2011, 13:04
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Leer contenido entre etiquetas html

Cita:
Iniciado por memoadian Ver Mensaje
es que abimael va unos años adelante de nosotros.
No hombre si usar SimpleXML o DOM es algo básico (bueno básico intermedio). Si lo dominas en un lenguaje (o sea DOM) lo dominas casi en todos los lenguajes.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #9 (permalink)  
Antiguo 06/06/2011, 13:07
Avatar de memoadian
Colaborador
 
Fecha de Ingreso: junio-2009
Ubicación: <?php echo 'México'?>
Mensajes: 3.696
Antigüedad: 14 años, 10 meses
Puntos: 641
Respuesta: Leer contenido entre etiquetas html

pues si pero me referia a tus frases misteriosas :D
  #10 (permalink)  
Antiguo 06/06/2011, 13:10
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Leer contenido entre etiquetas html

y como sería para encontrar todas las <td style="width: 168px"> y no todos los <td>?

estuve revisando y solo encontré:

getElementsByTagName
getElementsById
getElementsByTagNameNS

pero nada para encontrar atributos o valores
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #11 (permalink)  
Antiguo 06/06/2011, 13:18
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: Leer contenido entre etiquetas html

Podrías hacerlo de esta forma
Código PHP:
Ver original
  1. <?php
  2. $html = <<<HTML
  3. <html>
  4. <head>
  5. <title>FooBar</title>
  6. </head>
  7. <body>
  8. <table id="foo">
  9.     <tr>
  10.         <td style="width: 168px">foo</td>
  11.         <td>bar</td>
  12.         <td style="width: 168px">baz</td>
  13.         <td>candy</td>
  14.         <td style="width: 168px">fruits</td>
  15.         <td>vegetables</td>
  16.     </tr>
  17. </table>
  18.  
  19. <table id="bar">
  20.     <tr>
  21.         <td>foo1</td>
  22.         <td>bar2</td>
  23.         <td>baz3</td>
  24.         <td>candy4</td>
  25.         <td>fruits5</td>
  26.         <td>vegetables6</td>
  27.     </tr>
  28. </table>
  29. </body>
  30. </html>
  31. HTML;
  32.  
  33. $doc = new DOMDocument();
  34. $doc->loadHTML($html);
  35. $xpath = new DOMXPath($doc);
  36. foreach($xpath->query('//table[@id="foo"]//td[@style="width: 168px"]') as $v){
  37.     echo $v->firstChild->nodeValue . '<br />';
  38. }

Edito:
Y si quieres todos los td, no importando en que tabla se encuentra y que sea específico con lo que me indicaste, lo puedes hacer así:
Código PHP:
Ver original
  1. <?php
  2. $html = <<<HTML
  3. <html>
  4. <head>
  5. <title>FooBar</title>
  6. </head>
  7. <body>
  8. <table id="foo">
  9.     <tr>
  10.         <td style="width: 168px">foo</td>
  11.         <td>bar</td>
  12.         <td style="width: 168px">baz</td>
  13.         <td>candy</td>
  14.         <td style="width: 168px">fruits</td>
  15.         <td>vegetables</td>
  16.     </tr>
  17. </table>
  18.  
  19. <table id="bar">
  20.     <tr>
  21.         <td>foo1</td>
  22.         <td>bar2</td>
  23.         <td>baz3</td>
  24.         <td>candy4</td>
  25.         <td>fruits5</td>
  26.         <td style="width: 168px">vegetables6</td>
  27.     </tr>
  28. </table>
  29. </body>
  30. </html>
  31. HTML;
  32.  
  33. $doc = new DOMDocument();
  34. $doc->loadHTML($html);
  35. $xpath = new DOMXPath($doc);
  36. foreach($xpath->query('//td[@style="width: 168px"]') as $v){
  37.     echo $v->firstChild->nodeValue . '<br />';
  38. }

Ahora a estudiar
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #12 (permalink)  
Antiguo 06/06/2011, 13:24
Avatar de stramin  
Fecha de Ingreso: marzo-2008
Ubicación: Cubil felino
Mensajes: 1.652
Antigüedad: 16 años, 1 mes
Puntos: 336
Respuesta: Leer contenido entre etiquetas html

no entiendo que hace ni como lo hace pero funciona
__________________
El objetivo de este foro es orientar al usuario como un favor y no como una obligación.

Yo soy de los que dan puntos por aporte :D
  #13 (permalink)  
Antiguo 06/06/2011, 14:38
Avatar de iviamontes  
Fecha de Ingreso: enero-2011
Ubicación: $cubano->Arg->Mendoza
Mensajes: 1.184
Antigüedad: 13 años, 3 meses
Puntos: 209
Respuesta: Leer contenido entre etiquetas html

uff, pero alli hay de todo, DOM y selectores xpath, con abimaelrc hay que estudiar todas las noches un poco, que bueno !!!

Etiquetas: contenido, etiquetas, html
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 20:22.