Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Básico » Buscar información en página web Responder al tema
Nuevo tema


Página 1 de 1  [ 12 mensajes ] 
 
Nota 2012-01-16 08:45 @406

Perlero Frecuente
Registrado: 2011-04-05 11:14 @510
Mensajes: 148
Buscar información en página web
Hola a todos. Me gustaría saber si la siguiente acción que voy a mencionar se podría hacer mediante un script en Perl.

Cuando tú manualmente accedes a una página web y pulsas Editar->Buscar, cuando introduces lo que deseas buscar y lo encuentra, cada palabra encontrada aparece destacada en un color amarillo.

¿Se podría hacer mediante un script?


Nota 2012-01-16 10:07 @463
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: Buscar información en página web
Sí, solo hay que modificar el código HTML que se generó, incorporando estilos para que el fondo del texto cambie. El resultado es la misma página, pero con unas pocas marcas más.

Para buscar la palabra (suponemos que solo es una), puedes usar la expresión regular

$html =~ s{\b$palabra\b}{<span class=".fondoamarillo">$palabra</span>}g;

Aquí, estamos haciendo un cambio en todas las palabras encontradas, para agregarles marcas <span>, que modifican el estilo de ese texto, con otro que tengamos definido en las hojas CSS.

Usamos \b, que indica "límite de palabra". Así, buscamos por toda la palabra, y solo esa palabra (sin más caracteres por delante ni por detrás).

_________________
JF^D Perl programming


Nota 2012-01-16 11:35 @524

Perlero Frecuente
Registrado: 2011-04-05 11:14 @510
Mensajes: 148
Re: Buscar información en página web
Hummm... sí, pero, por ejemplo, yo he encontrado una noticia nueva con mi programa en la página web generando un RSS. Y por ejemplo ahora quiero pulsar sobre la URL de esa página y pasándole como parámetro de búsqueda el título de la noticia, que esta vez cuando se abra en mi navegador se muestre en amarillo.

¿Cómo hago eso, mejor dicho, cómo lo tengo que poner?


Nota 2012-01-16 12:55 @579
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: Buscar información en página web
Aquí hay un problema: cuando estás pulsando en el enlace, el navegador va a pedir la página directamente, por lo que no puedes hacer nada, ya que no hay peticiones a tu código.

Una forma de resolverlo es que sea un programa tuyo el que modifique los enlaces, para que las peticiones le lleguen a él. Entonces lo que hace es bajarse la página HTML del enlace, luego le agrega la modificación del estilo, y eso es lo que devuelve al usuario.

Los enlaces a gráficos, fotos y resto de código JavaScript debería seguir funcionando, y bajando del sitio original.

Otra forma mucho más elaborada es mediante el motor XUL, pero su complejidad se escapa bastante de este foro.

_________________
JF^D Perl programming


Nota 2012-01-17 17:10 @757

Perlero Frecuente
Registrado: 2011-04-05 11:14 @510
Mensajes: 148
Re: Buscar información en página web
Hola explorer. A ver si te he entendido bien. ¿Sería de esta manera o necesito algún módulo de CPAN?

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. my $palabra = "CONTAMOS";
  2.  
  3. $html = "geneerado.html";
  4.  
  5. $html =~ s{\b$palabra\b}{<span class=".fondoamarillo">$palabra</span>}g;


Nota 2012-01-17 18:53 @828
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: Buscar información en página web
En $html debes tener el código HTML que quieres modificar. Ahí veo que solo tienes el nombre del archivo HTML. No lo has leído.

_________________
JF^D Perl programming


Nota 2012-01-18 06:14 @301

Perlero Frecuente
Registrado: 2011-04-05 11:14 @510
Mensajes: 148
Re: Buscar información en página web
Hola explorer. Ahora ya creo que lo he hecho correctamente puesto que cargo el contenido en la variable, lo modifica y genera otro .html. Los cambios los hace bien pero cuando lo abro con el navegador, no se muestra nada en color :? ¿Eso por qué es?

use warnings;
use File::Slurp;

my $html = read_file( 'geneerado.html' ) ;




my $palabra = "el";

$html =~ s{\b$palabra\b}{<span class=".fondoamarillo">$palabra</span>}g;

print $html,"\n";


write_file( 'creado.html', $html ) ;


Nota 2012-01-18 07:13 @342
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: Buscar información en página web
La página HTML debe saber también cómo es el estilo .fondoamarillo, por lo que habría que incluir una línea más de sustitución para agregar las líneas de definición CSS de ese estilo.

Una opción más rápida es, sencillamente, definir el estilo en la propia marca <span>:

$html =~ s{\b$palabra\b}{<span style="background-color:yellow;">$palabra</span>}g;

_________________
JF^D Perl programming


Nota 2012-02-01 17:05 @753

Perlero Frecuente
Registrado: 2011-04-05 11:14 @510
Mensajes: 148
Re: Buscar información en página web
Hola. Una pregunta: ¿se podría comprobar si un patrón de búsqueda funciona? Es decir si ese patrón me sacará información.

Por ejemplo, tengo 3 patrones de búsqueda para sacar las noticias de una página web. Si un patrón no saca ninguna información no pasa nada pero si ninguno de los tres saca información me gustaría saberlo. ¿Se puede comprobar eso? Yo había pensado que con el código de la página web hacer un "if exists..." el patrón entre el código. ¿Alguna solución?


Nota 2012-02-01 17:18 @763
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: Buscar información en página web
El operador =~ devuelve verdadero o falso según haya podido realizar su trabajo.

my $cambio1 = $html =~ s{\b$palabra\b}{<span class=".fondoamarillo">$palabra</span>}g;

De esa manera, puedes saber qué cambios han ocurrido.
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
my $hubo_cambios = $cambio1 + $cambio2 + $cambio3;
if (not $hubo_cambios) {
    say "Atención, no hubo cambios en la página";
}

_________________
JF^D Perl programming


Nota 2012-02-02 09:19 @430

Perlero Frecuente
Registrado: 2011-04-05 11:14 @510
Mensajes: 148
Re: Buscar información en página web
Sí, pero yo ahora no me refiero solamente a cambiar el formato de la página si lo ha hecho correctamente. Me refiero a la hora de crear un RSS con las noticias que se han añadido, si por ejemplo tengo tres patrones de búsqueda y uno de ellos me vale para sacar cuatro noticias y con los otros dos saco tres noticias con cada uno, si uno de ellos por ejemplo, el que me saca cuatro noticias si no consigue sacar ninguna ¿podría saber también de esta manera que no funciona o que ya no sirve?

Yo uso el código de XML::RSS::FromHTML:

Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. sub makeItemList {
  2.  
  3.     my $self = shift;
  4.     my $html = shift;
  5.  
  6.     # Interpretamos el código HTML y crear con ello una lista:
  7.  
  8.     my @list;
  9.  
  10.     # $html = decode('iso-8859-15', $html);                                             # Codificación ha 'iso-8859-15'.
  11.  
  12.     my $urls = $self->url();
  13.  
  14.     while ( $html =~ m{<div id="subnavigation">.+?<h2><span>(.+?)</span></h2>.+?<p class="preamble">(.+?)</p>}smg ) {
  15.  
  16.         # print "[$1][$2][$3]\n";                                                       # Imprimir por  pantalla lo que hemos encontrado.
  17.  
  18.         push(
  19.             @list,
  20.             {                          # La lista de los elementos (Título, Link, Descripcion).
  21.  
  22.                 Link        => $urls,
  23.                 title       => $1,
  24.                 description => $2,
  25.                 fecha       => $self->getDateTime(),
  26.             }
  27.         );
  28.  
  29.     }
  30.  
  31.     while ( $html =~ m{<div>.+?<p class="date">(.+?)</p>.+?<h4><a href=".+?">(.+?)</a></h4>}smg )
  32.     {                                  # Patrón por el que buscaremos las notícias.
  33.  
  34.         # print "[$1][$2][$3]\n";                                                       # Imprimir por  pantalla lo que hemos encontrado.
  35.  
  36.         push(
  37.             @list,
  38.             {                          # La lista de los elementos (Título, Link, Descripcion).
  39.  
  40.                 Link        => $urls,
  41.                 title       => $1,
  42.                 description => $2,
  43.  
  44.                 fecha => $self->getDateTime(),
  45.             }
  46.         );
  47.  
  48.     }
  49.  
  50.     while ( $html
  51.         =~ m{</div><div class=".+?"><h3 class="">(.+?)</h3>.+?<p class="read-more">.+?<a href=".+?"><span>(.+?)</span></a>}smg
  52.         ) {                            # Patrón por el que buscaremos las noticias.
  53.  
  54.         # print "[$1][$2][$3]\n";                                                       # Imprimir por  pantalla lo que hemos encontrado.
  55.  
  56.         push(
  57.             @list,
  58.             {                          # La lista de los elementos (Título, Link, Descripcion).
  59.  
  60.                 Link        => $urls,
  61.                 title       => $1,
  62.                 description => $2,
  63.                 fecha       => $self->getDateTime(),
  64.             }
  65.         );
  66.  
  67.     }
  68.     return \@list;                     # Devuelve la lista que hemos generado.
  69.  
  70. }
  71.  


Última edición por explorer el 2012-02-02 10:13 @467, editado 1 vez en total
Formateado de código con Perltidy


Nota 2012-02-02 10:17 @470
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10216
Re: Buscar información en página web
Lo que podrías hacer es que cada bucle while() guarde lo encontrado en un array diferente. Así, sabrás qué ha conseguido recuperar cada expresión regular (al final de la subrutina reúnes todos los array con @list = ( @array1, @array2, @array3, ...); antes de hacer el return()).

_________________
JF^D Perl programming


Responder al tema  [ 12 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO