2012-01-16 08:45 @406 |
|
|
jacks
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?
|
2012-01-16 10:07 @463 |
|
|
 |
explorer
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
|
2012-01-16 11:35 @524 |
|
|
jacks
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?
|
2012-01-16 12:55 @579 |
|
|
 |
explorer
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
|
2012-01-17 17:10 @757 |
|
|
jacks
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? Using perl Syntax Highlighting my $palabra = "CONTAMOS";
$html = "geneerado.html";
$html =~ s{\b$palabra\b}{<span class=".fondoamarillo">$palabra</span>}g;
|
2012-01-18 06:14 @301 |
|
|
jacks
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 ) ;
|
2012-02-01 17:05 @753 |
|
|
jacks
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?
|
2012-02-01 17:18 @763 |
|
|
 |
explorer
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. 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
|
2012-02-02 09:19 @430 |
|
|
jacks
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: Using perl Syntax Highlighting sub makeItemList {
my $self = shift;
my $html = shift;
# Interpretamos el código HTML y crear con ello una lista:
my @list;
# $html = decode('iso-8859-15', $html); # Codificación ha 'iso-8859-15'.
my $urls = $self->url();
while ( $html =~ m{<div id="subnavigation">.+?<h2><span>(.+?)</span></h2>.+?<p class="preamble">(.+?)</p>}smg ) {
# print "[$1][$2][$3]\n"; # Imprimir por pantalla lo que hemos encontrado.
push(
@list,
{ # La lista de los elementos (Título, Link, Descripcion).
Link => $urls,
title => $1,
description => $2,
fecha => $self->getDateTime(),
}
);
}
while ( $html =~ m{<div>.+?<p class="date">(.+?)</p>.+?<h4><a href=".+?">(.+?)</a></h4>}smg )
{ # Patrón por el que buscaremos las notícias.
# print "[$1][$2][$3]\n"; # Imprimir por pantalla lo que hemos encontrado.
push(
@list,
{ # La lista de los elementos (Título, Link, Descripcion).
Link => $urls,
title => $1,
description => $2,
fecha => $self->getDateTime(),
}
);
}
while ( $html
=~ m{</div><div class=".+?"><h3 class="">(.+?)</h3>.+?<p class="read-more">.+?<a href=".+?"><span>(.+?)</span></a>}smg
) { # Patrón por el que buscaremos las noticias.
# print "[$1][$2][$3]\n"; # Imprimir por pantalla lo que hemos encontrado.
push(
@list,
{ # La lista de los elementos (Título, Link, Descripcion).
Link => $urls,
title => $1,
description => $2,
fecha => $self->getDateTime(),
}
);
}
return \@list; # Devuelve la lista que hemos generado.
}
| Última edición por explorer el 2012-02-02 10:13 @467, editado 1 vez en total |
| Formateado de código con Perltidy |
|
|
Página 1 de 1
|
[ 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
|
|
Socializa |
 |
|