Autor Tema: extraer web en formato cadena  (Leído 2781 veces)

Desconectado LphpL

  • PHPerit@
  • *
  • Mensajes: 9
  • Karma: 0
    • Ver Perfil
extraer web en formato cadena
« en: 17 de Septiembre de 2007, 16:05:36 pm »
Hola, soy nueva en php, y necesito guardar en una cadena toda la información de una web para después tratarla, he intentado hacerlo con la función file_get_contest(), pero no consigo que me muetre la web en forma de texto. No puedo usar la funcion strip_tags porque mas adelante necesito buscar la información referente a los tags.
Si alguién puede ayudarme muchisimas gracias!

Comunidad PHPeros

extraer web en formato cadena
« en: 17 de Septiembre de 2007, 16:05:36 pm »

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re: extraer web en formato cadena
« Respuesta #1 en: 17 de Septiembre de 2007, 16:39:13 pm »
Mira, tienes que usar la funcion fopen para abrir la web, ejemplo.

$web 
fopen("http://miweb.com/pagina.php","r");


Luego usas la funcion fread, ejemplo.

$texto 
fread($web,LONGITUD CREO QUE EN BYTES);
echo 
$texto// MOSTRARA EL CODIGO FUENTE


Creo que así funcionaria!
Un saludop
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado LphpL

  • PHPerit@
  • *
  • Mensajes: 9
  • Karma: 0
    • Ver Perfil
Re: extraer web en formato cadena
« Respuesta #2 en: 17 de Septiembre de 2007, 20:24:06 pm »
gracias! voy a probar!

para tratar cadenas, usas el explode?
es decir si quiero guardar algo, a partir de una palabra, me recomiendas usar esta funcion?

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re: extraer web en formato cadena
« Respuesta #3 en: 17 de Septiembre de 2007, 21:14:06 pm »
explode() se utiliza para separar cadenas de texto en partes.
Por ejemplo:

$texto 
"HOLA-CARLOS";
$esto explode("-",$texto);
echo 
$esto[0]; // ESTO MOSTRARA 'HOLA' (SIN COMILLAS)
echo "<br>"// ESTO ES SIMPLEMENTE UN SALTO DE LINEA
echo $esto[1]; // ESTO MOSTRARA &#39;CARLOS&#39; (SIN COMILLAS)


Asi que no se para que te puede servir explode para guardar algo a partir de una palabra :S
Alomejor te he entendido mal, pero si lo explicas mejor seguro que te podemos ayudar, lee mi firma y postea de nuevo!

Un saludo!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado LphpL

  • PHPerit@
  • *
  • Mensajes: 9
  • Karma: 0
    • Ver Perfil
Re: extraer web en formato cadena
« Respuesta #4 en: 17 de Septiembre de 2007, 21:55:38 pm »
oks te explico,
he de leer el codigo xhtml de una web, y a partir de aquí buscar un tag en este codigo que se llama "keyword" y guardarme el contenido de dicho tag.
Por eso necesito leer primer el codigo de la web y despues tratar la cadena, peró no sé muy bien por donde tirar, he ido probando cosas como el explode, pero no es lo que busco exactamente.
Muchas gracias por tu ayuda!

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re: extraer web en formato cadena
« Respuesta #5 en: 17 de Septiembre de 2007, 22:31:55 pm »
Primero deberias recojer en la variable $file (Para este ejemplo usaremos esa variable) el codigo fuente de la web, con el metodo que te dije arriba.

Luego deberias usar la funcion explode para separar el texto ANTES de <keyword> y DESPUES de <keyword> con la funcion explode


$uno 
explode("<keyword>",$file);
# A partir de este momento la variable $uno[0] contendra el codigo fuente ANTES de la palabra <keyword>
# Y $uno[1] contendra el codigo fuente DESPUES de la palabra <keyword>


Ahora que la variable $uno[1] tiene el codigo fuente DESPUES de <keyword> vamos a limitar este texto, hasta la palabra </keyword> para asi solo seleccionar el texto que hay entre los tags <keyword> y </keyword>


$dos 
explode("</keyword>",$uno[1]);
# Hacemos un explode a la variable $uno[1] (Que es la que contiene el codigo fuente DESPUES de <keyword>)
# Con esto conseguimos que la variable $dos[0] contenga el codigo entre los tags <keyword> y </keyword>
# Y la variable $dos[1] contendra el codigo fuente despues de </keyword>


Con esto ya tenemos el codigo entre los tags <keyword> y </keyword> en la variable $dos[0]

Un saludo espero haberte sido de ayuda!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado FeDe

  • PHPero Avanzado
  • ****
  • Mensajes: 448
  • Karma: 35
  • Sexo: Masculino
  • BaDyDj -> ¡Mi Stylo, Mi ViDa!
    • Ver Perfil
Re: extraer web en formato cadena
« Respuesta #6 en: 17 de Septiembre de 2007, 23:28:59 pm »
Buenas,

Te recomendaría que utilizases ereg, o eregi con las expresiones regulares, que te facilitarán el trabajo, pero aún así puedes hacerlo con explode...

te dejo un pequeño ejemplo...

<?php

$texto 
"<html>
<head>
<title>Bienvenidos a PHPEros</title>
</head>
<body bgcolor=#FF0000>
Test
</body>
</html>"
;


//Vamos a sacar, el titulo de la pagina y el código de background

$titulo[0] = explode("<title>",$texto);
$titulo[1] = explode("</title>",$titulo[0]);
$bg[0] = explode(&#39;<body bgcolor=&#39;,$texto);
$bg[1] = explode(&#39;>&#39;,$bg[0]);

print "Titulo web: "$titulo[1]. "<br>";
print 
"Color de fondo: <table><tr><td bgcolor=\"".$bg[1]."\">&nbsp;</td></tr></table>";

?>


Es un ejemplo simple, si no entiendes algo postealo.

Saludos :P
« Última modificación: 18 de Septiembre de 2007, 20:29:20 pm por FeDe »
Sin Firma me haces una? :P

Desconectado LphpL

  • PHPerit@
  • *
  • Mensajes: 9
  • Karma: 0
    • Ver Perfil
Re: extraer web en formato cadena
« Respuesta #7 en: 18 de Septiembre de 2007, 10:59:30 am »
hola, e probado el siguiente codigo, pero no consigo ver la web enf orma de texto.... solo me hago que me aparezca la misma web tal cual...

$web = fopen("http://www.news.com","rb");
$texto = fread($web,9800);
echo $web;
fclose($web);

tal vez he hecho algo mal.., cmo lo veis??

Desconectado FeDe

  • PHPero Avanzado
  • ****
  • Mensajes: 448
  • Karma: 35
  • Sexo: Masculino
  • BaDyDj -> ¡Mi Stylo, Mi ViDa!
    • Ver Perfil
Re: extraer web en formato cadena
« Respuesta #8 en: 18 de Septiembre de 2007, 13:50:55 pm »
Sí mira, lo que has hecho es coger el código fuente & imprimirlo tal cual.. mostrando el código como HTML, tienes que pasarlo a texto plano con la función htmlentities();, aquí te dejo el código.

<?php
$web 
fopen("","rb");
$texto fread($web,9800);
echo 
htmlentities($web);
fclose($web);
?>


Espero que te sirva :P

Saludos :)
Sin Firma me haces una? :P

Desconectado LphpL

  • PHPerit@
  • *
  • Mensajes: 9
  • Karma: 0
    • Ver Perfil
Re: extraer web en formato cadena
« Respuesta #9 en: 18 de Septiembre de 2007, 19:07:31 pm »
gracias, ahora si que lo he visto bien!!
estava provando en sacar el trozo de codigo que me interesa, que se encuntra dentro de un tag, xo lo unico que consigo mostrar es la palabra "Array", el codigo que he usado es el siguiente con el explode:

$bg[0] = explode('<meta name="keywords" content="',$texto);
$bg[1] = explode('>',$texto);
         
echo ($bg[1]);


puede ser que también me este equivocando al mostrar la información?? he estado buscando y normalmente para mostrar array's lo hacen de esta manera.
otra duda q tengo, es q diferencia hay entre echo y print?

gracias de nuevo

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re: extraer web en formato cadena
« Respuesta #10 en: 18 de Septiembre de 2007, 19:26:01 pm »
Hazlo asi:

$bg 
explode(&#39;<meta name="keywords" content="&#39;,$texto);
$bg2 explode(&#39;>&#39;,$bg[1]);
         
echo ($bg2[0]);


Saludos!
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado LphpL

  • PHPerit@
  • *
  • Mensajes: 9
  • Karma: 0
    • Ver Perfil
Re: extraer web en formato cadena
« Respuesta #11 en: 18 de Septiembre de 2007, 20:05:42 pm »
muchas gracias!!!! ya tngo la cadena! ^^

me podrias explicar porque es en bg2[0] donde se almacena la cadena que me interesa??
« Última modificación: 18 de Septiembre de 2007, 20:08:03 pm por LphpL »

Desconectado CarlosRdrz

  • Moderador Global
  • PHPero Master
  • *****
  • Mensajes: 2.505
  • Karma: 131
  • Sexo: Masculino
  • A.k.a. TLX
    • Ver Perfil
Re: extraer web en formato cadena
« Respuesta #12 en: 18 de Septiembre de 2007, 20:20:46 pm »
Porque cuando haces esto


$bg2 
explode(&#39;>&#39;,$bg[1]);


La parte que va ANTES del caracter entre las comillas, es siempre $bg2[0], y lo que va DESPUES siempre sera $bg[1]

Por eso mismo.


$bg 
explode(&#39;<meta name="keywords" content="&#39;,$texto);


Con eso divides el codigo guardado en $texto en dos partes,
$bg[0] => Ahora contendra la primera parte es decir, el codigo antes de <meta name="keywords" content="
$bg[1] => Ahora contendra la segunda parte es decir, el codigo DESPUES de lo de meta name...


$bg2 
explode(&#39;>&#39;,$bg[1]);

Con esto dividimos la segunda parte del codigo anterior, en otras dos partes.
$bg2[0] => Ahora esto contendra el codigo ANTES del caracter > (Es decir, el texto que quieres sacar)
$bg2[1] => Esto contendra el resto del codigo, es decir, el texto despues del caracter >

Espero que lo hayas entendido, se que no soy muy buen profesor, pero si tienes alguna otra duda no dudes en hacermelo saber,

Un saludo
La dedicación de mi respuesta sera directamente proporcional a la dedicación de tu pregunta.
Hacer códigos que entiendan las máquinas es fácil, lo difícil y realmente útil es hacer códigos que entiendan las personas.
http://twitter.com/CarlosRdrz
http://www.carlosrdrz.es

Desconectado FeDe

  • PHPero Avanzado
  • ****
  • Mensajes: 448
  • Karma: 35
  • Sexo: Masculino
  • BaDyDj -> ¡Mi Stylo, Mi ViDa!
    • Ver Perfil
Re: extraer web en formato cadena
« Respuesta #13 en: 18 de Septiembre de 2007, 20:28:06 pm »
Buenas,

Perdón LphpL a sido fallo mío en el
$bg[0] = explode(&#39;<body bgcolor=&#39;,$texto);
$bg[1] = explode(&#39;>&#39;,$texto);


Tendría que haber puesto:
$bg[0] = explode(&#39;<body bgcolor=&#39;,$texto);
$bg[1] = explode(&#39;>&#39;,$bg[0]);


Perdona las molestias, TLX Muy bien explicado :)

Saludos :P
Sin Firma me haces una? :P

Desconectado LphpL

  • PHPerit@
  • *
  • Mensajes: 9
  • Karma: 0
    • Ver Perfil
Re: extraer web en formato cadena
« Respuesta #14 en: 20 de Septiembre de 2007, 11:26:51 am »
hola! aun sigo con lo mismo...
no entiendo porque al poner este codigo:

<?php
$web 
fopen("http://www.news.com/","rb");
if (!
$web) {
	
echo 
"<p>Unable to open website\n<p>";
	
exit;
} else {
	
$texto fread($web,9800);
	
$ini_link=explode(&#39;<div class="rb_subnav">&#39;,$texto);
	
$ini_link2=explode(&#39;</div>&#39;,$ini_link[1]);
	
echo 
"info links0 --->";
	
echo 
"<br>";
	
echo 
htmlentities($ini_link[1]);
	
echo 
"<br>";
	
$delimitador "a href"
	
$numpalabras count(explode($delimitador$ini_link2[0])); 
	
echo 
"num links: $numpalabras"."<br>";
	
$kw explode(&#39;<meta name="keywords" content="&#39;,$texto);
	
$kw2 explode(&#39;>&#39;,$kw[1]);
	
echo (
$kw2[0]);
	
fclose($web);
}
?>


me da este error--> Notice: Undefined offset: 1  en la linia   $ini_link2=explode('</div>',$ini_link[1]);

y en la salida de  echo htmlentities($ini_link[0]);, me da tmb el mismo error, no me deberia mostrar elr esto de codigo??

le estoy dando muchas vueltas de como hacerlo y ya nos e que poner.
Muchas gracias por vuestra ayuda!!
« Última modificación: 20 de Septiembre de 2007, 12:58:19 pm por naveda »