Foros del Web » Programando para Internet » PHP »

Extraer un apartado con php

Estas en el tema de Extraer un apartado con php en el foro de PHP en Foros del Web. Hola a todos. Tengo el sigiente código: <td headers="vuelo1" class="col1"><a href="/csee/Satellite/infovuelos/es/Detalle.html?accion=detalle&amp;company_code=TAP&a mp;dia=20120229&amp;hora_prev=2012-02-29+11%3A40&amp;ncia=TAP&amp;numBusqueda=TAP1031&am p;nvuelo=1031&amp;ordenacionBack=hprevisto&amp;ori gin=BCN&amp;originBack=BCN&amp;originBusqueda=BCN& amp;strVuelo=TAP1031" title=""> TAP1031 </a></td> Me gustaría cómo extraer de ese código ...
  #1 (permalink)  
Antiguo 29/02/2012, 07:32
 
Fecha de Ingreso: agosto-2006
Mensajes: 11
Antigüedad: 18 años, 3 meses
Puntos: 3
Extraer un apartado con php

Hola a todos.

Tengo el sigiente código:

<td headers="vuelo1" class="col1"><a href="/csee/Satellite/infovuelos/es/Detalle.html?accion=detalle&amp;company_code=TAP&a mp;dia=20120229&amp;hora_prev=2012-02-29+11%3A40&amp;ncia=TAP&amp;numBusqueda=TAP1031&am p;nvuelo=1031&amp;ordenacionBack=hprevisto&amp;ori gin=BCN&amp;originBack=BCN&amp;originBusqueda=BCN& amp;strVuelo=TAP1031" title="">TAP1031</a></td>



Me gustaría cómo extraer de ese código sólo lo que viene después de strVuelo=TAP1031" title=""> y antes de </a>; es decir TAP1031. Me han dicho algo de expresiones regulares, pero no doy a basto con ello. ¿Alguien me podría echar un cable?
  #2 (permalink)  
Antiguo 29/02/2012, 08:52
 
Fecha de Ingreso: agosto-2011
Mensajes: 110
Antigüedad: 13 años, 3 meses
Puntos: 13
Respuesta: Extraer un apartado con php

En este mismo foro he encontrado un post que explica como usar expresiones regulares espero que te ayude.
http://www.forosdelweb.com/f18/aport...s-pcre-646110/

si no, siempre puedes emplear elementos del lado del cliente como JQuery y pasarlos al servidor mediante Ajax
  #3 (permalink)  
Antiguo 29/02/2012, 10:37
 
Fecha de Ingreso: agosto-2006
Mensajes: 11
Antigüedad: 18 años, 3 meses
Puntos: 3
Respuesta: Extraer un apartado con php

Gracias por tu respuesta.

Sí que le di un ojo a eso, pero la verdad es que no sé por dónde empezar. Me lio entre tanto letra y figura
  #4 (permalink)  
Antiguo 29/02/2012, 11:27
 
Fecha de Ingreso: agosto-2011
Mensajes: 110
Antigüedad: 13 años, 3 meses
Puntos: 13
Respuesta: Extraer un apartado con php

jejejejejej si , es bastante lio al principio pero una vez las entiendes... son un recurso de programacion muy potente para multiples propositos , ten un tutorial algo mas amplio sobre el uso en php

te recomiendo que tomes tu tiempo en aprender el uso de expresiones regulares, no tienes que saberlo todo de memoria, pero al menos entender que son , como usarlas de forma basica y saber cuando seran utiles... es un buen recurso

http://www.mclibre.org/consultar/php...regulares.html
  #5 (permalink)  
Antiguo 29/02/2012, 11:46
 
Fecha de Ingreso: agosto-2006
Mensajes: 11
Antigüedad: 18 años, 3 meses
Puntos: 3
Respuesta: Extraer un apartado con php

Gracias otra vez Bray! Aunque me da a mí que esto no es lo mío; veo demasiado difícil el asunto jejeje. Otro día será, cuando mi cerebro esté más "descansado".

Gracias otra vez!
  #6 (permalink)  
Antiguo 29/02/2012, 12:44
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 18 años, 1 mes
Puntos: 74
Respuesta: Extraer un apartado con php

Buenas queck,

Así es, se realiza con expresiones regulares Veo que bray ya te ha dado unos enlaces para que les heches un vistazo, yo por mi parte te he creado esta expresión que espero te sirva. Las expresiones me costó aprenderlas y aún hoy no las domino al 100% pero bueno, el siguiente código creo que cumple con su función:

Código PHP:
Ver original
  1. $str ='<td headers="vuelo1" class="col1"><a href="/csee/Satellite/infovuelos/es/Detalle.html?accion=detalle&amp;company_code=TAP&a mp;dia=20120229&amp;hora_prev=2012-02-29+11%3A40&amp;ncia=TAP&amp;numBusqueda=TAP1031&am p;nvuelo=1031&amp;ordenacionBack=hprevisto&amp;ori gin=BCN&amp;originBack=BCN&amp;originBusqueda=BCN& amp;strVuelo=TAP1031" title="sds">TAP1031</a></td>';
  2.  
  3. $patron = "/^.*<a{1}\shref={1}('.+'|\".+\")\stitle={1}('.+'|\".+\")>.+<\/a>{1}.*$/";
  4.  
  5. if(preg_match($patron, $str)):
  6.     echo $str;
  7. else:
  8.     echo 'No se pudo capturar';
  9. endif;

Saludos,
  #7 (permalink)  
Antiguo 29/02/2012, 12:54
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: Extraer un apartado con php

Las expresiones regulares no son la mejor opción para estos casos. Es más recomendado usar las clases DOM de PHP. Un ejemplo básico, pero se pueden lograr cosas bastante complejas:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $html = '<td headers="vuelo1" class="col1">
  4. <a href="/csee/Satellite/infovuelos/es/Detalle.html?accion=detalle&amp;company_code=TAP&amp;dia=20120229&amp;hora_prev=2012-02-29+11%3A40&amp;ncia=TAP&amp;numBusqueda=TAP1031&amp;nvuelo=1031&amp;ordenacionBack=hprevisto&amp;origin=BCN&amp;originBack=BCN&amp;originBusqueda=BCN&amp;strVuelo=TAP1031" title="">
  5. TAP1031</a>
  6. </td>';
  7.  
  8. $doc = new DOMDocument();
  9. $doc->loadHTML($html);
  10. $xpath = new DOMXPath($doc);
  11. $s = $xpath->query('//td[@headers="vuelo1"][@class="col1"]');
  12. echo $s->item(0)->nodeValue;

http://php.net/manual/es/class.domdocument.php

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #8 (permalink)  
Antiguo 29/02/2012, 13:43
 
Fecha de Ingreso: agosto-2006
Mensajes: 11
Antigüedad: 18 años, 3 meses
Puntos: 3
Respuesta: Extraer un apartado con php

Gracias chichos! Pensaba que ya lo tenía perdido!

LLamarme torpe, pero es que aunque he intentando 1000 veces.. los dos códigos me mandan Parse error: syntax error, unexpected T_VARIABLE in /home/a7787239/public_html/porf.php on line 3. Y lo peor es que no veo ningún error en esa línea. :S
  #9 (permalink)  
Antiguo 29/02/2012, 14:01
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: Extraer un apartado con php

Mi código no tiene errores de sintaxis y el código de OsSk4R tampoco (Aunque no funciona o devuelve el resultado correcto). Trata de copiarlo manualmente, porque el foro aveces mete caracteres invisibles.

PD: Si puedes da más información para ayudarte mejor.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #10 (permalink)  
Antiguo 29/02/2012, 14:19
 
Fecha de Ingreso: agosto-2006
Mensajes: 11
Antigüedad: 18 años, 3 meses
Puntos: 3
Respuesta: Extraer un apartado con php

hola andres,

aquí te pego la imagen donde detecta los errores

http://i44.tinypic.com/jt8i6r.png

gracias!
  #11 (permalink)  
Antiguo 29/02/2012, 14:21
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: Extraer un apartado con php

Borra los espacios seguramente hay algún carácter invisible y como te dije da más información.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #12 (permalink)  
Antiguo 29/02/2012, 15:05
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 18 años, 1 mes
Puntos: 74
Respuesta: Extraer un apartado con php

Cita:
Iniciado por andresdzphp Ver Mensaje
Las expresiones regulares no son la mejor opción para estos casos. Es más recomendado usar las clases DOM de PHP. Un ejemplo básico, pero se pueden lograr cosas bastante complejas:

Código PHP:
Ver original
  1. <?php
  2.  
  3. $html = '<td headers="vuelo1" class="col1">
  4. <a href="/csee/Satellite/infovuelos/es/Detalle.html?accion=detalle&amp;company_code=TAP&amp;dia=20120229&amp;hora_prev=2012-02-29+11%3A40&amp;ncia=TAP&amp;numBusqueda=TAP1031&amp;nvuelo=1031&amp;ordenacionBack=hprevisto&amp;origin=BCN&amp;originBack=BCN&amp;originBusqueda=BCN&amp;strVuelo=TAP1031" title="">
  5. TAP1031</a>
  6. </td>';
  7.  
  8. $doc = new DOMDocument();
  9. $doc->loadHTML($html);
  10. $xpath = new DOMXPath($doc);
  11. $s = $xpath->query('//td[@headers="vuelo1"][@class="col1"]');
  12. echo $s->item(0)->nodeValue;

http://php.net/manual/es/class.domdocument.php

Saludos.
La verdad desconocia esa clase andresdzphp, por eso le recomendé las expresiones

Cita:
Iniciado por andresdzphp Ver Mensaje
Mi código no tiene errores de sintaxis y el código de OsSk4R tampoco (Aunque no funciona o devuelve el resultado correcto). Trata de copiarlo manualmente, porque el foro aveces mete caracteres invisibles.

PD: Si puedes da más información para ayudarte mejor.

Saludos.
No lo entendi ¿a que te refieres?

Saludos,

PD: qeck copialo a mano, ya que el error de sintaxis que te da es porque hay espacios. A mi también me pasa xD
  #13 (permalink)  
Antiguo 29/02/2012, 15:08
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: Extraer un apartado con php

OsSk4R según entendí él necesita sacar TAP1031 del string, no todo el string. A eso me refiero.

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #14 (permalink)  
Antiguo 29/02/2012, 15:34
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 18 años, 1 mes
Puntos: 74
Respuesta: Extraer un apartado con php

¿Y eso hace no? La expresión la cree para que sacara el texto del enlace. Mejor dicho, cualquier texto contenido en un enlace. Si algo esta mal me gustaría que me lo corrigeras jeje, ya sabes que no soy muy avezado con las expresiones. ;)

Saludos,
  #15 (permalink)  
Antiguo 29/02/2012, 15:38
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: Extraer un apartado con php

Lo que estás haciendo es imprimir el mismo string:

Código PHP:
Ver original
  1. echo $str;

Lo que tienes que hacer es capturar lo que haya entra la etiqueta <a> y el cierre </a> con ( ) e imprimir sólo el string de la captura TAP1031

Un ejemplo muy básico para que entiendas la idea:


Código PHP:
Ver original
  1. <?php
  2.  
  3. $str ='<td headers="vuelo1" class="col1"><a href="/csee/Satellite/infovuelos/es/Detalle.html?accion=detalle&amp;company_code=TAP&amp;dia=20120229&amp;hora_prev=2012-02-29+11%3A40&amp;ncia=TAP&amp;numBusqueda=TAP1031&amp;nvuelo=1031&amp;ordenacionBack=hprevisto&amp;origin=BCN&amp;originBack=BCN&amp;originBusqueda=BCN&amp;strVuelo=TAP1031" title="sds">TAP1031</a></td>';
  4.  
  5. preg_match('@<td headers="vuelo1" class="col1"><a href=".*">(.*?)</a>@is', $str, $m);
  6.  
  7. echo $m[1]; //TAP1031

Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 29/02/2012 a las 15:43
  #16 (permalink)  
Antiguo 01/03/2012, 05:04
 
Fecha de Ingreso: agosto-2006
Mensajes: 11
Antigüedad: 18 años, 3 meses
Puntos: 3
Respuesta: Extraer un apartado con php

Hola chicos!

Muuuchisimas gracias por vuestro interés. Efectivamente, era cuestión de espacios. Los dos códigos funcionan a la perfección.

Me da hasta vergüenza preguntaros más, pero estoy teniendo varias dudas. Resulta que ahora intento que me coja más de un resultado. He creado un script con cURL que me devuelve en la variable $html todo el contenido de la página http://www.aena-aeropuertos.es/csee/Satellite/infovuelos/es/Busqueda-avanzada.html?accion=busqueda&ordenacion=hprevisto &origin=MAD&originBusqueda=MAD&pag=8. En esta página hay varios códigos como el anterior que puse antes. He intentado hacerlo con el código de andrés, pero no funciona. Con el código de oSK4R, he cambiado preg_mach por preg_mach_all pero tampoco.
¿Alguna sugerencia?
  #17 (permalink)  
Antiguo 01/03/2012, 06:04
Avatar de OsSk4R  
Fecha de Ingreso: octubre-2006
Ubicación: $this->home
Mensajes: 824
Antigüedad: 18 años, 1 mes
Puntos: 74
Respuesta: Extraer un apartado con php

Cita:
Iniciado por andresdzphp Ver Mensaje
Lo que estás haciendo es imprimir el mismo string:

Código PHP:
Ver original
  1. echo $str;

Lo que tienes que hacer es capturar lo que haya entra la etiqueta <a> y el cierre </a> con ( ) e imprimir sólo el string de la captura TAP1031

Un ejemplo muy básico para que entiendas la idea:


Código PHP:
Ver original
  1. <?php
  2.  
  3. $str ='<td headers="vuelo1" class="col1"><a href="/csee/Satellite/infovuelos/es/Detalle.html?accion=detalle&amp;company_code=TAP&amp;dia=20120229&amp;hora_prev=2012-02-29+11%3A40&amp;ncia=TAP&amp;numBusqueda=TAP1031&amp;nvuelo=1031&amp;ordenacionBack=hprevisto&amp;origin=BCN&amp;originBack=BCN&amp;originBusqueda=BCN&amp;strVuelo=TAP1031" title="sds">TAP1031</a></td>';
  4.  
  5. preg_match('@<td headers="vuelo1" class="col1"><a href=".*">(.*?)</a>@is', $str, $m);
  6.  
  7. echo $m[1]; //TAP1031

Saludos.
¡Aja! Entendido y buena respuesta como siempre Andres. Esta es la segunda vez que me ayudas con las expresiones regulares ;) Gracias.

qeck, ¿quieres capturar más enlaces? No se como lo estas haciendo, así que estaría bien que publicaras el código que tienes hecho. Aunque como recomienda Andres deberías de hacerlo con la clase DOM en la cual yo sí que no tengo ni idea

Saludos,
  #18 (permalink)  
Antiguo 01/03/2012, 06:38
 
Fecha de Ingreso: agosto-2006
Mensajes: 11
Antigüedad: 18 años, 3 meses
Puntos: 3
Respuesta: Extraer un apartado con php

Hola!

Estaba modificando tu código de expresiones regulares, pero creo que me va a ser eterno; ya que me da a mí que hay que modificar mucho.

Me voy a poner con la clase DOM, a ver si puedo hacer algo.

De momento, tengo lo siguiente:

Cita:
<?php


$html=file_get_contents("http://www.aena-aeropuertos.es/csee/Satellite/infovuelos/es/Busqueda-avanzada.html?accion=busqueda&ordenacion=hprevisto &origin=MAD&originBusqueda=MAD&pag=8");



$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$s = $xpath->query('//td[@headers="vuelo1"][@class="col1"]');
echo $s->item(0)->nodeValue;

?>
Pero como sabrás, sólo devuelve el primero que lo encuentra.

Gracias!

Última edición por qeck; 01/03/2012 a las 06:45
  #19 (permalink)  
Antiguo 01/03/2012, 06:56
 
Fecha de Ingreso: agosto-2006
Mensajes: 11
Antigüedad: 18 años, 3 meses
Puntos: 3
Respuesta: Extraer un apartado con php

Hola!

Ya está! Era bastante fácil. Le he añadido un bucle, y conseguido que me coja los primeros 10 resultados.

Cita:
<?php


$html=file_get_contents("http://www.aena-aeropuertos.es/csee/Satellite/infovuelos/es/Busqueda-avanzada.html?accion=busqueda&ordenacion=hprevisto &origin=MAD&originBusqueda=MAD&pag=8");



$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$s = $xpath->query('//td[@headers="vuelo1"][@class="col1"]');

for ($i = 0; $i <= 10; $i++) {
echo "- " . $s->item($i)->nodeValue . "<BR>";
}
?>
Gracias!

Etiquetas: apartado, 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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 13:04.