Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Básico » Comparar páginas Perl Responder al tema
Nuevo tema


Página 1 de 10  [ 149 mensajes ]  Ir a página 1, 2, 3, 4, 5 ... 10  Siguiente
 
Nota 2011-04-11 10:05 @462

Perlero Frecuente
Registrado: 2011-04-05 11:14 @510
Mensajes: 148
Comparar páginas Perl
Hola, escribí este tema en avanzado pero me recomendaron ponerlo aquí para obtener diferentes respuestas.

Os pongo un ejemplo de lo que quiero conseguir: "Imaginar que quiero mantenerme informado de las noticias que aparecen en una pagina deportiva pero solo me interesan las noticias de fútbol, con lo cual proporcionando la dirección URL a mi programa en Perl me gustaría generar información RSS con el título parte de la noticia y el link. Al principio había pensado en descargarme la página y compararla descargándomela más tarde también para encontrar diferencias."

Me gustaría saber más o menos cómo podría generar el RSS. Gracias.


Nota 2011-04-12 09:38 @443

Perlero Frecuente
Registrado: 2011-04-05 11:14 @510
Mensajes: 148
Re: Comparar páginas Perl
¿Alguien podría decirme alguna idea sobre este tema?
Gracias.


Nota 2011-04-12 10:05 @461
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Comparar páginas Perl
Hay varios módulos en Perl que facilitan ese trabajo. Solo tienes que entrar en CPAN y buscar por RSS.

Dos de los más curiosos, y que coinciden con tu tarea, son XML::RSS::FromHTML y XML::RSS::FromHTML::Simple.

El segundo te permitirá hacer cosas más rápidas, pero solo extrae los enlaces que tiene una página y, como texto, el propio texto del enlace.

El primero, en cambio, hace que sea responsabilidad tuya la extracción de la información desde la página HTML, por lo que podrás filtrar mejor qué es lo que quieres que luego salga como RSS.

_________________
JF^D Perl programming


Nota 2011-04-12 11:10 @507

Perlero Frecuente
Registrado: 2011-04-05 11:14 @510
Mensajes: 148
Re: Comparar páginas Perl
Muchas gracias, explorer.


Nota 2011-04-15 06:33 @314

Perlero Frecuente
Registrado: 2011-04-05 11:14 @510
Mensajes: 148
Re: Comparar páginas Perl
Hola. El módulo XML::RSS::FromHTML no está en el repositorio y me lo bajé de la página. Lo he descomprimido y, la verdad, no puedo instalarlo porque me dice que no encuentra el paquete. Me he leído los tutoriales de ppm pero la verdad no encuentro manera de hacerlo.


Nota 2011-04-15 07:51 @368
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Comparar páginas Perl
Supongo que habrás visto mi guía de instalación y uso del PPM.

Según trouchelle.com, en los resultados de instalación del módulo, hay algunos problemas. No me dices qué versión de Perl estás usando, pero he supuesto que es el Perl v5.12, en Windows.

Si ves la matriz de compatibilidad, verás que Windows no es un buen sistema operativo para desarrollar :wink: Lo raro es que lo he mirado, y no veo muy bien qué error es...

Yo lo acabo de instalar en mi Linux OpenSuSE, y me sale que ha tenido que instalar, a mayores, los módulos HTML::Parser (que ha necesitado compilación), XML::RSS, DateTime::Format::Mail, DateTime::Format::W3CDTF, Test::Manifest.

Según estos mensajes de error, si consigues instalar los módulos HTML::Parser v3.68 y el XML::RSS v1.48, sí que podrías instalar la última versión de XML::RSS::FromHTML, pero en Perl v5.10.

La única versión estable que se puede instalar sin problemas es: con Perl v5.8, instalando la versión XML::RSS::FromHTML v0.02, que, sospecho, va a ser muy antigua.

En la mayoría de los casos, veo que son errores que se pueden intentar solventar, modificando los ficheros de instalación, pero no he llegado a verlos, así que no puedo afirmarlo con rotundidad.

Voy a ver si hago algo con el módulo XML::RSS::FromHTML que acabo de instalar...

_________________
JF^D Perl programming


Nota 2011-04-15 11:39 @527

Perlero Frecuente
Registrado: 2011-04-05 11:14 @510
Mensajes: 148
Re: Comparar páginas Perl
La verdad que yo prefiero hacerlo en Linux Ubuntu pero es que necesito que el .exe que tengo que hacer corra en Windows con lo cual tendré que solucionar los problemas que encuentre. De todas formas, en Windows tengo instalada la versión Perl v5.8. Quizás deba actualizarla a la v5.10.


Nota 2011-04-19 17:51 @786
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Comparar páginas Perl
Bueno, este es mi experimento.
Con este programa:
Syntax: [ Download ] [ Hide ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. #
  3. # Análisis del diario Marca
  4. # Joaquín Ferrero. 20110620
  5. #
  6. use strict;
  7. use warnings;
  8.  
  9. use utf8;                               # este programa está escrito en codificación utf8
  10.  
  11. package Marca;
  12.  
  13. use Encode qw'decode';
  14. use base 'XML::RSS::FromHTML';
  15.  
  16. sub init {
  17.     my $self = shift;
  18.     # configuración
  19.     $self->name('Marca');
  20.     $self->url('http://www.marca.com/futbol/1adivision.html');
  21. }
  22.  
  23. sub defineRSS {
  24.     my $self = shift;
  25.     my $xmlrss  = shift;
  26.     # definiciones del RSS generado
  27.     $xmlrss->channel(
  28.         title => 'Fuente de titulares de Marca.com, Fútbol 1ª div.',
  29.         description => 'Titulares de la 1ª división de Fútbol en España',
  30.     );
  31. }
  32.  
  33. sub makeItemList {
  34.     my $self = shift;
  35.     my $html = shift;
  36.     # interpretamos el código HTML y crear con ello una lista
  37.     my @list;
  38.  
  39.     $html = decode('iso-8859-15', $html);
  40.  
  41.     while ($html =~ m|<h3><a href="(.+?)" title="(.+?)".+?<p>(.+?)<|smg){
  42.         push(@list,{
  43.             link        => $1,
  44.             title       => $2,
  45.             description => $3,
  46.         });
  47.     }
  48.     return \@list;
  49. }
  50.  
  51. sub addNewItem {
  52.     my $self = shift;
  53.     my ($xmlrss,$eachItem) = @_;
  54.     # crear cada elemento del RSS usando el método XML::RSS->add_item
  55.     $xmlrss->add_item(
  56.             title       => $eachItem->{title      },
  57.             link        => $eachItem->{link       },
  58.             description => $eachItem->{description},
  59.     );
  60. }
  61.  
  62.  
  63. #### nuestro programa principal
  64. package main;
  65. #use Marca;
  66.  
  67. my $rss = Marca->new();
  68. $rss->update;
  69.  
  70. __END__
  71.  
Este programa crea dos ficheros:
  • Marca.xml, con el RSS generado
  • Marca.cache, con la memoria de lo generado, para cuando haya que generarlo de nuevo (histórico de entradas)

La salida Marca.xml es:
Syntax: [ Download ] [ Hide ]
Using xml Syntax Highlighting
  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <rdf:RDF
  4. xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  5. xmlns="http://purl.org/rss/1.0/"
  6. xmlns:content="http://purl.org/rss/1.0/modules/content/"
  7. xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/"
  8. xmlns:dc="http://purl.org/dc/elements/1.1/"
  9. xmlns:syn="http://purl.org/rss/1.0/modules/syndication/"
  10. xmlns:admin="http://webns.net/mvcb/"
  11. >
  12.  
  13. <channel rdf:about="">
  14. <title>Fuente de titulares de Marca.com, F&#xFA;tbol 1&#xAA; div.</title>
  15. <link></link>
  16. <description>Titulares de la 1&#xAA; divisi&#xF3;n de F&#xFC;tbol en Espa&#xF1;a</description>
  17. <items>
  18.  <rdf:Seq>
  19.   <rdf:li rdf:resource="/2011/04/19/futbol/equipos/atletico/1303193748.html" />
  20.   <rdf:li rdf:resource="/2011/04/19/futbol/equipos/mallorca/1303228475.html" />
  21.   <rdf:li rdf:resource="/2011/04/19/futbol/equipos/atletico/1303240637.html" />
  22.   <rdf:li rdf:resource="/2011/04/19/futbol/equipos/zaragoza/1303233632.html" />
  23.   <rdf:li rdf:resource="/2011/04/19/futbol/equipos/valencia/1303216739.html" />
  24.   <rdf:li rdf:resource="/2011/04/19/futbol/equipos/atletico/1303226866.html" />
  25.   <rdf:li rdf:resource="/2011/04/19/futbol/1adivision/1303207287.html" />
  26.   <rdf:li rdf:resource="/2011/04/19/futbol/1adivision/1303233471.html" />
  27.   <rdf:li rdf:resource="/2011/04/19/futbol/equipos/sevilla/1303208236.html" />
  28.   <rdf:li rdf:resource="/2011/04/19/futbol/equipos/almeria/1303220951.html" />
  29.   <rdf:li rdf:resource="/2011/04/19/futbol/equipos/athletic/1303218087.html" />
  30.  </rdf:Seq>
  31. </items>
  32. </channel>
  33. <item rdf:about="/2011/04/19/futbol/equipos/atletico/1303193748.html">
  34. <title>Gil Mar&#xED;n: &#x26;quot;Ag&#xFC;ero no ir&#xE1; al Madrid ni aunque paguen la cl&#xE1;usula&#x26;quot;</title>
  35. <link>/2011/04/19/futbol/equipos/atletico/1303193748.html</link>
  36. <description>Gil Mar&#xED;n: &#x26;quot;Ag&#xFC;ero no ir&#xE1; al Madrid ni aunque paguen la cl&#xE1;usula&#x26;quot;</description>
  37. </item>
  38. <item rdf:about="/2011/04/19/futbol/equipos/mallorca/1303228475.html">
  39. <title>El Mallorca quiere un lleno contra el Getafe</title>
  40. <link>/2011/04/19/futbol/equipos/mallorca/1303228475.html</link>
  41. <description>El Mallorca quiere un lleno contra el Getafe</description>
  42. </item>
  43. ...

Tengo dudas de que los acentos estén bien generados, pero el caso es que el grueso del trabajo está hecho.

Ya solo queda arrancar este programa de forma periódica, una vez al día, por ejemplo.

Editado: arreglado un error en línea 41.

_________________
JF^D Perl programming


Nota 2011-04-27 06:47 @324

Perlero Frecuente
Registrado: 2011-04-05 11:14 @510
Mensajes: 148
Re: Comparar páginas Perl
Increíble. Muchas gracias, explorer. La verdad, estos días estuve intentando hacerlo mediante el código que proporciona en la página de CPAN y había bastantes pasos que no entendía el porqué había que hacerlo así.

Muchas gracias de verdad.


Nota 2011-04-28 11:34 @523

Perlero Frecuente
Registrado: 2011-04-05 11:14 @510
Mensajes: 148
Re: Comparar páginas Perl
Hola, explorer. He intentado ejecutar el programa pero no tenía instalado el XML::RSS::FromHTML. Lo he instalado con:

perl -MCPAN -e "install Modulo"

y le he dado a yes en todos los paso que me pedía instalar los módulos que se requerían pero una vez instalados ejecuto el programa y me dice lo siguiente:

Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
Base class package "XML::RSS::FromHTML" is empty.
    (Perhaps you need to 'use' the module which defines that package first,
    or make that module available in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .).
 at generarRSS.txt line 19
BEGIN failed--compilation aborted at generarRSS.txt line 19.


Nota 2011-04-28 11:45 @531
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Comparar páginas Perl
El error dice que no se ha inscrito bien el módulo dentro del programa, o que no se ha instalado en alguno de los directorios indicados.

Por favor, localiza el directorio donde está instalado. Si no está, es que no se instaló.

Por ejemplo, para saber qué módulo Data::Dumper vamos a cargar:
Syntax: [ Download ] [ Hide ]
Using bash Syntax Highlighting
explorer@casa:~/Documentos/Desarrollo> perl -MData::Dumper -le 'print $INC{"Data/Dumper.pm"}'
/usr/lib/perl5/5.12.3/i586-linux-thread-multi/Data/Dumper.pm


Para instalarlo con el comando cpan, vale con escribir

cpan XML::RSS::FromHTML

_________________
JF^D Perl programming


Nota 2011-04-28 12:03 @544

Perlero Frecuente
Registrado: 2011-04-05 11:14 @510
Mensajes: 148
Re: Comparar páginas Perl
No sé si lo he puesto bien pero esto es lo que pongo y el resultado creo que no se instala:

Syntax: [ Download ] [ Hide ]
Using bash Syntax Highlighting
jasck@ubuntu:~$ perl -MXML::RSS::FromHTML -le 'print $INC{"XML/RSS/FromHTML.pm"}'
Can't locate XML/RSS/FromHTML.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl .).
BEGIN failed--compilation aborted.



Cuando me pone esto le doy a sí todo el rato. ¿Igual es lo que estoy haciendo mal?

Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
Checking if your kit is complete...
Looks good
Warning: prerequisite Class::Accessor::Fast 0 not found.
Warning: prerequisite HTML::Parser 3.68 not found. We have 3.65.
Warning: prerequisite XML::RSS 1.48 not found.
Writing Makefile for XML::RSS::FromHTML
Could not read '/home/jasck/.cpan/build/XML-RSS-FromHTML-0.06-_1yP40/META.yml'. Falling back to other methods to determine prerequisites
---- Unsatisfied dependencies detected during ----
----    BASHI/XML-RSS-FromHTML-0.06.tar.gz    ----
    XML::RSS [requires]
    Class::Accessor::Fast [requires]
    HTML::Parser [requires]
Shall I follow them and prepend them to the queue
of modules we are processing right now? [yes]

y el resultado final es:

Test Summary Report
-------------------
t/001_load.t            (Wstat: 256 Tests: 1 Failed: 1)
  Failed test:  1
  Non-zero exit status: 1
t/002_new.t             (Wstat: 512 Tests: 0 Failed: 0)
  Non-zero exit status: 2
  Parse errors: Bad plan.  You planned 1 tests but ran 0.
t/003_util_methods.t    (Wstat: 512 Tests: 0 Failed: 0)
  Non-zero exit status: 2
  Parse errors: Bad plan.  You planned 8 tests but ran 0.
t/004_checkInterval.t   (Wstat: 512 Tests: 0 Failed: 0)
  Non-zero exit status: 2
  Parse errors: Bad plan.  You planned 10 tests but ran 0.
t/005_getHTML.t         (Wstat: 512 Tests: 0 Failed: 0)
  Non-zero exit status: 2
  Parse errors: Bad plan.  You planned 1 tests but ran 0.
t/006_makeItemList.t    (Wstat: 512 Tests: 0 Failed: 0)
  Non-zero exit status: 2
  Parse errors: Bad plan.  You planned 1 tests but ran 0.
t/007_cache.t           (Wstat: 512 Tests: 0 Failed: 0)
  Non-zero exit status: 2
  Parse errors: Bad plan.  You planned 10 tests but ran 0.
t/008_loadOldRss.t      (Wstat: 512 Tests: 0 Failed: 0)
  Non-zero exit status: 2
  Parse errors: Bad plan.  You planned 13 tests but ran 0.
t/009_pre_remakeNewRss.t (Wstat: 512 Tests: 0 Failed: 0)
  Non-zero exit status: 2
  Parse errors: Bad plan.  You planned 14 tests but ran 0.
t/010_remakeRss_allnew.t (Wstat: 512 Tests: 0 Failed: 0)
  Non-zero exit status: 2
  Parse errors: Bad plan.  You planned 10 tests but ran 0.
t/011_remakeRss_allold.t (Wstat: 512 Tests: 0 Failed: 0)
  Non-zero exit status: 2
  Parse errors: Bad plan.  You planned 9 tests but ran 0.
t/012_remakeRss_combo.t (Wstat: 512 Tests: 0 Failed: 0)
  Non-zero exit status: 2
  Parse errors: Bad plan.  You planned 55 tests but ran 0.
Files=12, Tests=1,  2 wallclock secs ( 0.19 usr  0.06 sys +  1.41 cusr  0.32 csys =  1.98 CPU)
Result: FAIL
Failed 12/12 test programs. 1/1 subtests failed.
make: *** [test_dynamic] Error 2
  BASHI/XML-RSS-FromHTML-0.06.tar.gz
  /usr/bin/make test -- NOT OK
//hint// to see the cpan-testers results for installing this module, try:
  reports BASHI/XML-RSS-FromHTML-0.06.tar.gz
Warning (usually harmless): 'YAML' not installed, will not store persistent state
Running make install
  make test had returned bad status, won't install without force
Could not read '/home/jasck/.cpan/build/Params-Validate-0.98-qmltvk/META.yml'. Falling back to other methods to determine prerequisites


Nota 2011-04-28 12:22 @557
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Comparar páginas Perl
Si estás en Ubuntu, intenta siempre instalar primero los módulos desde el gestor de aplicaciones Synaptic (o desde la línea de comandos, con apt-get o con el gestor del sistema adecuado). Eso te garantizará que se bajarán las dependencias adecuadas. Veo que XML::RSS::FromHTML no está en mi lista de paquetes de software en mi Debian, así que tampoco estará en Ubuntu.

Pero... es posible que sí estén los que necesitas antes:

  • YAML
  • Class::Accessor::Fast
  • XML::RSS
  • HTML::Parser

Debes intentar instalar primero estos módulos. Primero mirando si están como paquetes de software. Y si no, con el comando cpan o el cpanp, instalarlos desde la línea de comandos, como root del sistema (debes ser root del sistema para que cpanp pueda colocarlo en los directorios del sistema donde perl va a buscar los módulos. Otra opción sería no instalarlos ahí, sino en un directorio personal, pero solo sería visible para tus programas. Consulta perlbrew, en ese caso).

Ojo con HTML::Parser. Dice que hay una versión vieja, así que hay que actualizarle. Si lo encuentras como paquete de software del sistema, comprueba que Ubuntu te da la versión que necesitas (la v3.68). Si no, lo mejor es desinstalarlo e instalarlo desde la línea de comandos con el cpanp.

Una vez que estén instalados ya puedes probar a instalar el XML::RSS::FromHTML.

Los mensajes de error indican errores muy graves: han terminado de forma brusca sin realizarse todas las comprobaciones (los avisos de Bad plan). Así que algo no está bien hecho.

_________________
JF^D Perl programming


Nota 2011-05-04 04:31 @229

Perlero Frecuente
Registrado: 2011-04-05 11:14 @510
Mensajes: 148
Re: Comparar páginas Perl
Hola explorer. He intentado lo que me dijiste tanto con el gestor como con apt-get. Con el primero no encuentro el paquete en el repositorio. Igual se llama diferente y con apt-get me dice que no lo encuentra:

Syntax: [ Download ] [ Hide ]
Using bash Syntax Highlighting
  1. jacks@ubuntu:~$ sudo apt-get install 'XML::RSS::FromHTML'
  2. Leyendo lista de paquetes... Hecho
  3. Creando árbol de dependencias      
  4. Leyendo la información de estado... Hecho
  5. E: No se ha podido localizar el paquete XML::RSS::FromHTML


¿Tendré que descargarme los paquetes manualmente y entonces instalarlos uno por uno?


Nota 2011-05-04 05:04 @252
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10249
Re: Comparar páginas Perl
Es muy difícil acordarse del nombre de todos los paquetes de Debian/Ubuntu, así que es normal que no hayas acertado con el nombre del módulo.

En Debian (y por lo tanto, también en Ubuntu), los paquetes relacionados con Perl tienen estos nombres:

...
libperl-critic-perl
libperl6-export-perl
libperl6-form-perl
libperl6-say-perl
libperl6-slurp-perl
libperldoc-search-perl
libperlio-eol-perl
libperlio-via-dynamic-perl
...

Por eso, es mejor usar una herramienta como aptitude (desde la línea de comandos) o Synaptic (desde el entorno gráfico de Ubuntu), ya que te pueden ayudar a encontrarlos. El apt-get es para cuando sabes, exactamente, el nombre del paquete.

También puedes usar el comando apt-cache search perl para ver la lista completa. Y con apt-cache search perl|fgrep xml-rss, aquellos paquetes que contienen 'xml-rss' en el nombre. A mí me salen:

Syntax: [ Download ] [ Hide ]
Using text Syntax Highlighting
libxml-rss-feed-perl - Perl module for Persistent XML RSS (RDF Site Summary) Encapsulation
libxml-rss-perl - Perl module for managing RSS (RDF Site Summary) files
libxml-rss-simplegen-perl - A Perl module for easily writing RSS files
libxml-rsslite-perl - Lightweight, "relaxed" RSS (and XML-ish) parser


Con lo que no, no está en la lista el que buscamos.

Entonces, lo que hay que hacer es, primero, instalar los módulos de los que depende y sí están en la lista:

Syntax: [ Download ] [ Hide ]
Using bash Syntax Highlighting
  1. apt-get install libyaml-perl # YAML Ain't Markup Language
  2. apt-get install libxml-rss-perl # Perl module for managing RSS (RDF Site Summary) files
  3. apt-get install libhtml-parser-perl # Una colección de módulos que analizan documentos de texto en HTML


Y no está Class::Accessor::Fast. Éste y el XML::RSS::FromHTML entonces, los instalaremos con el comando cpanp:

Syntax: [ Download ] [ Hide ]
Using bash Syntax Highlighting
  1. cpanp install Class::Accessor::Fast
  2. cpanp install XML::RSS::FromHTML

_________________
JF^D Perl programming


Responder al tema  [ 149 mensajes ]  Ir a página 1, 2, 3, 4, 5 ... 10  Siguiente

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