• Publicidad

Transformar un documento HTML a .txt

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Transformar un documento HTML a .txt

Notapor lis » 2008-10-15 17:28 @769

Hola amigos del foro. Hice un script para descargar archivos desde un sitio en la web, me los descarga sin extensión pero me los baja como documento HTML. Mi pregunta es si los archivos que descargo los puedo convertir a .txt :?:

Acá esta el script:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w

foreach my $mes ( 1 ) {
    foreach my $dia ( 1 .. 9 ) {
        foreach my $hora ( 12 ) {
            $dh="$dia"."$hora";
            system (" wget 'http://weather.uwyo.edu/cgi-bin/sounding?region=samer&TYPE=TEXT%3ALIST&YEAR=2005&MONTH=0$mes&FROM=0$dh&TO=0$dh&STNM=85442' ");
        }
    }
}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Cualquier ayuda se agradece de antemano, adiosiiinn
lis
Perlero nuevo
Perlero nuevo
 
Mensajes: 106
Registrado: 2008-05-27 21:43 @946

Publicidad

Notapor explorer » 2008-10-15 17:52 @786

Si, las páginas están en HTML, pero solo tienes que extraer las partes que están entre <pre> y </pre>.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor lis » 2008-10-15 18:08 @797

Gracias por responder tan rápido, Explorer, pero no entiendo a lo que te refieres, ¿podrías ser un poco más claro, por favor?
lis
Perlero nuevo
Perlero nuevo
 
Mensajes: 106
Registrado: 2008-05-27 21:43 @946

Notapor explorer » 2008-10-15 18:28 @811

Sí, que dentro del código HTML que te bajas hay unas marcas que indican texto preformateado (marcas <pre>).

Esto es lo que digo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

use LWP::Simple;

my $URL = 'http://weather.uwyo.edu/cgi-bin/sounding?region=samer&TYPE=TEXT%3ALIST&YEAR=2005&STNM=85442';

foreach my $mes ( "01" ) {
    foreach my $dia ( "01" .. "09" ) {
        foreach my $hora ( 12 ) {

            print "$mes-$dia-$hora";
            my $pagina = get("$URL\&MONTH=$mes\&FROM=$dia$hora\&TO=$dia$hora");
            print "\n";

            if (defined $pagina) {
                if ((my $datos) = $pagina =~ m/^ <pre> (.+?) ^ <\/pre> $/simox) {
                    $datos =~ s{<.+?>}{}g;
                    print "$datos\n";
                }
            }
        }
    }
}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor lis » 2008-10-16 15:04 @669

¡¡Grande, Explorer!!. Muchas, muchas gracias por tu ayuda.

Por favor, ayúdame a resolver otro dilema que tengo y que no lo expresé anteriormente. En el script que generaste agregué dos líneas más que están comentadas.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

use LWP::Simple;

open (DATA, ">sondas.txt"); #creo este archivo.

my $URL = 'http://weather.uwyo.edu/cgi-bin/sounding?region=samer&TYPE=TEXT%3ALIST&YEAR=2005&STNM=85442';

foreach my $mes ( "01" ) {
foreach my $dia ( "01" .. "09" ) {
foreach my $hora ( 12 ) {
print "$mes-$dia-$hora";
my $pagina = get("$URL\&MONTH=$mes\&FROM=$dia$hora\&TO=$dia$hora");
print "\n";

if (defined $pagina) {
if ((my $datos) = $pagina =~ m/^ <pre> (.+?) ^ <\/pre> $/simox) {
$datos =~ s{<.+?>}{}g;
print DATA "$datos\n"; # todo lo que se descarga se guarde en sondas.txt
}}}}}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Esto me guarda todo lo que se descarga en solo archivo que llame sondas.txt, y es aquí donde nuevamente necesito tu ayuda: ¿cómo puedo guardar cada descarga (que corresponde a un día) en un archivo distinto y que estos archivos se guarden con la fecha que corresponda? Es decir:

Se descarga esto:
Código: Seleccionar todo
   PRES   HGHT   TEMP   DWPT   RELH   MIXR   DRCT   SKNT   THTA   THTE   THTV
    hPa     m      C      C      %    g/kg    deg   knot     K      K      K
-----------------------------------------------------------------------------
 1002.0    135   18.0   16.3     90  11.77    210      7  291.0  324.4  293.0
 1000.0    131   18.0   13.3     74   9.68    210      7  291.1  318.8  292.9
  925.0    794   13.8    8.8     72   7.74     90      2  293.4  315.9  294.8
  850.0   1507   18.0   -8.0     16   2.47     65      8  305.0  313.0  305.4
  700.0   3158   13.0                         185      5  316.9         316.9
  500.0   5890   -4.5                         205      6  327.5         327.5
  400.0   7620  -14.7                         205     13  335.8         335.8
  300.0   9730  -30.7                         260     27  342.0         342.0
  250.0  11000  -41.3                         280     33  344.5         344.5
  200.0  12470  -54.1                         290     35  346.9         346.9
  150.0  14250  -67.3                         295     28  354.0         354.0
  100.0  16630  -77.7                         205     22  377.4         377.4
   82.6  17723  -80.3                         240      8  393.2         393.2
   70.0  18670  -77.1                         125     16  419.1         419.1
   50.0  20650  -70.5                          70     28  476.9         476.9
   30.0  23810  -55.3                         105     14  593.3         593.3
   20.0  26420  -49.3                         100     21  684.5         684.5
Station information and sounding indices
                         Station identifier: SCFA
                             Station number: 85442
                           Observation time: 050102/1200
                           Station latitude: -23.43
                          Station longitude: -70.43
                          Station elevation: 135.0
                            Showalter index: 16.03
                               Lifted index: 12.97
    LIFT computed using virtual temperature: 12.66
                                SWEAT index: 22.01
                         Cross totals index: -3.50
                      Vertical totals index: 22.50
                        Totals totals index: 19.00
      Convective Available Potential Energy: 0.00
             CAPE using virtual temperature: 0.00
                      Convective Inhibition: 0.00
             CINS using virtual temperature: 0.00
                     Bulk Richardson Number: 0.00
          Bulk Richardson Number using CAPV: 0.00
  Temp [K] of the Lifted Condensation Level: 284.20
Pres [hPa] of the Lifted Condensation Level: 910.37
     Mean mixed layer potential temperature: 291.96
              Mean mixed layer mixing ratio: 9.19
              1000 hPa to 500 hPa thickness: 5759.00
Precipitable water [mm] for entire sounding: 10.79

que corresponde al día 2 de enero de 2005 y lo quiero guardar en un archivo que se llama, por ejemplo, 02-01-12.txt, y así para cada día.

Por favor, Explorer, ayúdame, ya que los tengo que descargarlos para todo el año y guardarlos por separado uno por uno me demandaría un tiempo que no tengo.

Muchas gracias.
lis
Perlero nuevo
Perlero nuevo
 
Mensajes: 106
Registrado: 2008-05-27 21:43 @946

Notapor explorer » 2008-10-16 16:41 @737

Bueno, pues el tiempo que te va ahorrar este programa lo puedes emplear en estudiarlo, para seguir ahorrando más tiempo, en el futuro... :)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use LWP::Simple;
$|++;

my $URL = 'http://weather.uwyo.edu/cgi-bin/sounding?region=samer&TYPE=TEXT%3ALIST&YEAR=2005&STNM=85442';

foreach my $mes ( "01" ) {
    foreach my $dia ( "01" .. "09" ) {
        foreach my $hora ( 12 ) {

            my $fecha   = "$mes-$dia-$hora";
            my $fichero = "$fecha.txt";

            print "$fecha... ";
            my $pagina = get("$URL&MONTH=$mes&FROM=$dia$hora&TO=$dia$hora");
            print "Ok... ";

            if (defined $pagina) {
                if ((my $datos) = $pagina =~ m/^<pre>(.+?)^<\/pre>$/simo) {
                    $datos =~ s{<.+?>}{}g;
                    open  FICHERO, ">$fichero" or die "ERROR: $!\n";
                    print FICHERO "$datos\n"   or die "ERROR: $!\n";
                    close FICHERO              or die "ERROR: $!\n";
                    print "Grabado";
                }
            }
            print "\n";
        }
    }
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor lis » 2008-10-16 17:32 @772

Muchísimas gracias, Explorer.

Cada vez aprendo más con ustedes, y cada cosa trato de aplicarla, pero a veces no me resulta, pero voy a seguir estudiando :D . Gracias.
lis
Perlero nuevo
Perlero nuevo
 
Mensajes: 106
Registrado: 2008-05-27 21:43 @946


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron