Foros del Web » Programando para Internet » PHP »

Como extraer el contenido que esta entre dos etiquetas

Estas en el tema de Como extraer el contenido que esta entre dos etiquetas en el foro de PHP en Foros del Web. Saludos: Quisiera saber como hacer para extraer el contenido que hay entre dos etiquetas, por ejemplo, tengo un texto, dentro de este texto dice: <a ...
  #1 (permalink)  
Antiguo 09/04/2008, 16:11
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
Como extraer el contenido que esta entre dos etiquetas

Saludos:

Quisiera saber como hacer para extraer el contenido que hay entre dos etiquetas, por ejemplo, tengo un texto, dentro de este texto dice:

<a href = "...">Pagina Web1</a>
<a href = "...">Pagina Web2</a>
<a href = "...">Pagina Web3</a>

Yo quisiera saber como puedo extraer lo que esta dentro de <a> y </a>.

Espero que alguien me de una guia, gracias.
__________________
El aprendiz.
  #2 (permalink)  
Antiguo 09/04/2008, 16:27
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Como extraer el contenido que esta entre dos etiquetas

Hola juandedios,

Para eso debes de usar preg_match.

Saludos.
  #3 (permalink)  
Antiguo 10/04/2008, 09:14
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
Re: Como extraer el contenido que esta entre dos etiquetas

Ok, lo revise en php.net pero aun no me queda muy claro, podrias guiarme con un ejemplo de como extraer lo que esta dentro de las etiquetas <a> y </a>?
__________________
El aprendiz.
  #4 (permalink)  
Antiguo 10/04/2008, 10:07
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Re: Como extraer el contenido que esta entre dos etiquetas

asi...

Código PHP:
if (preg_match('/<a[^>]*>(.+?)<\/a>/i''<a href="foo">Link<a/><a name="bar">Anchor</a>'$test))
{
print_r($test);

ahora... intenta estudiar un poco....

Última edición por pateketrueke; 10/04/2008 a las 10:08 Razón: variable uups
  #5 (permalink)  
Antiguo 10/04/2008, 10:52
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
Re: Como extraer el contenido que esta entre dos etiquetas

Lo que quiero hacer es lo siguiente:

Primero Busco desde un formulario hecho en mi página una palabra en Google, luego hago que el código fuente de dicha búsqueda sea guardada en una variable, despues quiero extraer todos los contenidos que hay dentro de las etiquetas <a> y </a> que hay en este codigo fuente.

Lo que yo voy haciendo está así, a ver si de esto, me pueden guiar mejor:

<php>
<?php
$s = $_GET["search"];

//Para buscar en Google
if (isset($_GET["buscarg"])) {
$url_a = "http://www.google.com.pe/search?hl=es&q=";
$url_b = "&meta=";
}

$url = $url_a . $s . $url_b;

$url_web = fopen ($url, "r");
if (!$url_web) { echo "<p>Error obteniendo codigo fuente de la web.\n"; exit; }

while (!feof ($url_web)) {
$contenido .= fgets ($url_web);
}

fclose($url_web);

$patron = '/<a>(.*?)<\/a>/';
preg_match_all ($patron, htmlentities("$contenido"), $matches);
echo "<pre>";
print_r($matches[1]);
echo "</pre>";
?>
</php>
en la impresión me sale esto:

Array
(
)

Porfa ayúdenme.
__________________
El aprendiz.
  #6 (permalink)  
Antiguo 10/04/2008, 11:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Como extraer el contenido que esta entre dos etiquetas

htmlentities te reemplaza los caracteres, por lo que nunca te va a servir tu patrón, quita htmlentities para que te funcione correctamente.

Saludos.
  #7 (permalink)  
Antiguo 10/04/2008, 11:03
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Re: Como extraer el contenido que esta entre dos etiquetas

estos <a> estan vacios???

$patron = '/<a>(.*?)<\/a>/';

Si en realidad contienen atributos, como href... puedes omitirlos ((y a laves agregarlos en el patron)) asi...


$patron = '/<a[^>]*>(.*?)<\/a>/';

algo mas?

Última edición por pateketrueke; 10/04/2008 a las 11:04 Razón: lo de las htmlentities() es verdad
  #8 (permalink)  
Antiguo 10/04/2008, 14:29
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
Re: Como extraer el contenido que esta entre dos etiquetas

Y por ejemplo si quisiera extraer sólo el contenido de aquellas etiquetas <a> que dentro tengan el atributo class=1.

Yo estoy intentándolo pero nada que me sale.
__________________
El aprendiz.
  #9 (permalink)  
Antiguo 10/04/2008, 15:31
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Re: Como extraer el contenido que esta entre dos etiquetas

primero... obtienes el arreglo de todos los match...

luego los pero esto ves, intenta capturar ([^>]*) para poderlo usar como referencia de atributos,
luego con otra expresion /\s*([\w:-]+)\s*=\s*"([^"]*)"/i nos apoderamos de los atributos, ahora si... podemos empezar a compararlos ¿me explico?


((y una area de expresiones regulares)) ¿donde?
  #10 (permalink)  
Antiguo 10/04/2008, 17:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Como extraer el contenido que esta entre dos etiquetas

Hola juandedios,

Te recomiendo veas esta clase: htmlSQL, podrías hacer algo así:
Código:
SELECT * FROM a WHERE $class==1
Saludos.
  #11 (permalink)  
Antiguo 11/04/2008, 10:40
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
Re: Como extraer el contenido que esta entre dos etiquetas

Hola GatorV, estuve chekando la clase que me recomendaste y por los ejemplos se ve bien buena, la quiero implementar a lo que estoy haciendo, pero creo que algo anda mal, te pongo aquí el script para ver si ves algun error.

Código PHP:
<?php
include_once("js/snoopy.class.php");
include_once(
"js/htmlsql.class.php");

$s $_GET["search"];

//Para buscar en Google
if (isset($_GET["buscarg"])) {
    
$url_a "http://www.google.com.pe/search?hl=es&q=";
    
$url_b "&meta=";
}
    
$url $url_a $s $url_b;

$wsql = new htmlsql();
    
    if (!
$wsql->connect('url'$url)){
        print 
'Error mientras se conectaba: ' $wsql->error;
        exit;
    }
    
    if (!
$wsql->query('SELECT * FROM a WHERE $class == 1')){
        print 
"Query error: " $wsql->error
        exit;
    }

    
// show results:
    
foreach($wsql->fetch_array() as $row){
    
        
print_r($row);
        
    }
?>
La cosa es que no me sale nada, ni siquiera un mensaje de error.
__________________
El aprendiz.
  #12 (permalink)  
Antiguo 11/04/2008, 11:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Como extraer el contenido que esta entre dos etiquetas

Tienes configurado tu PHP para mostrar errores?, pon esto al inicio de tu script:
Código PHP:
error_reportingE_ALL ); 
Saludos.
  #13 (permalink)  
Antiguo 11/04/2008, 14:48
 
Fecha de Ingreso: mayo-2003
Ubicación: Lima
Mensajes: 967
Antigüedad: 20 años, 11 meses
Puntos: 8
Re: Como extraer el contenido que esta entre dos etiquetas

Lo puse y nada.
__________________
El aprendiz.
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 12:16.