Descarga de archivos desde la web usando Perl

Perl es un lenguaje interpretado multipropósito que a menudo se implementa mediante secuencias de comandos de Perl que se pueden guardar con la extensión .pl y ejecutar directamente mediante la terminal o el símbolo del sistema. Es un lenguaje multiplataforma estable que se desarrolló principalmente con capacidades sólidas en términos de manipulación y modificación de texto y extracción de información de páginas web. Está en desarrollo activo y de código abierto. Encuentra un uso importante en el desarrollo web, la administración de sistemas e incluso el desarrollo de GUI debido a su capacidad para trabajar con HTML, XML y otros lenguajes de marcado. Se usa de manera destacada junto con la Web, ya que puede manejar datos web cifrados además de las transacciones de comercio electrónico. 

En este artículo, veremos diferentes enfoques para descargar páginas web e imágenes usando scripts de Perl.

Descargar páginas web usando Perl

Descargar una página web usando el comando del sistema wget

En este enfoque, escribimos una subrutina donde se pasa una URL a un comando del sistema. La variable almacena el contenido de la página web en formato HTML sin formato. Luego devolvemos estos contenidos.

Perl

#!usr/bin/perl
  
# using the strict pragma
use strict;
  
# using the warnings pragma
# to generate warnings in case of incorrect
# code
use warnings;
  
# specifying the Perl version 
use 5.010;
  
# declaring the sub routine
sub getWebPage {
  
    # variable to store the URL
    my $url = 'http://www.google.com/';
      
    # variable to store the contents of the 
    # web page
    my $webpage = system 
    "wget --output-document=- $url";
      
    # returning the contents of the web page
    return $webpage;
}
  
# printing user friendly message
say "the contents of the downloaded web page : ";
  
# calling the sub routine
getWebPage();

Producción:

the contents of the downloaded web page :
<raw HTML web page>

Descargar una página web usando el comando del sistema curl

Este enfoque es exactamente el mismo que el anterior, con la única diferencia de que aquí el comando del sistema utilizado es «curl» en lugar de «wget».

Perl

#!usr/bin/perl
  
# using the strict pragma
use strict;
  
# using the warnings pragma to 
# generate warnings in case of 
# erroneous code
use warnings;
  
# specifying the Perl version
use 5.010;
  
# declaring the sub routine
sub getWebPage {
  
    # variable to store the URL
    my $url = 'http://www.google.com/';
      
    # variable to store the contents of the
    # downloaded web page
    my $downloadedPage = system "curl $url";
      
    # returning the contents using the variable
    return $downloadedPage;
}
  
# displaying a user friendly message
say "the contents of the web page : ";
  
# calling the sub routine
getWebPage();

Producción:

the contents of the downloaded web page :
<raw HTML web page>

Descarga de una página web usando LWP::Simple Module

LWP::Simple es un módulo en Perl que proporciona un get() que toma la URL como parámetro y devuelve el cuerpo del documento. Devuelve undef si el servidor no puede procesar la URL solicitada.

Perl

#!usr/bin/perl
  
# using the strict pragma
use strict;
  
# using the warnings pragma to
# generate warnings in case of 
# erroneous codes
use warnings;
  
# specifying the Perl version
use 5.010;
  
# calling the LWP::Simple module
use LWP::Simple;
  
# declaring the sub routine
sub getWebPage {
  
    # variable to store the URL 
    my $url = 'http://www.google.com';
      
    # passing the URL to the get function
    # of LWP::Simple module
    my $downloadedPage = get $url;
      
    # printing the contents of the web page
    say $downloadedPage;
}
  
# displaying a user friendly message
say 'the contents of the web page are : ';
  
#calling the sub routine
getWebPage();

Producción:

the contents of the downloaded web page :
<raw HTML web page>

Descargar una página web usando HTTP::Tiny

HTTP::Tiny es un cliente HTTP/1.1 simple, lo que implica que se usa para obtener, colocar, eliminar, encabezado (acciones básicas de HTTP). Se utiliza para realizar requests simples sin la sobrecarga de un gran marco. Primero, se crea una instancia de una variable HTTP usando el operador new. A continuación, obtenemos el código de la solicitud pasando la URL en el método get. En el código exitoso, obtenemos la longitud y el contenido de la página web en la dirección de la URL especificada. En el caso de un código fallido, mostramos el mensaje apropiado y mencionamos los motivos de la falla de conexión.

Perl

#!usr/bin/perl
  
# using the warnings pragma to
# generate warnings in case of 
# erroneous code
use warnings;
  
# specifying the Perl version
use 5.010;
  
# calling the HTTP::Tiny module
use HTTP::Tiny;
  
# declaring the sub routine
sub getWebPage{
  
    # variable to store the URL
    my $url = 'http://www.google.com/';
      
    # instantiating the HTTP variable
    my $httpVariable = HTTP::Tiny->new;
      
    # storing the response using the get
    # method
    my $response = $httpVariable->get($url);
      
    # checking if the code returned successful
    if ($response -> {success}){
      
        # specifying the length of the
        # web page content using the 
        # length keyword
        say 'the length of the web page : ';
        my $length = length $response->{content};
        say $length;
          
        # displaying the contents of the webpage
        say 'the contents of the web page are : ';
        my $downloadedPage = $response->{content};
        say $downloadedPage;
    }
      
    # logic for when the code is
    # unsuccessful
    else{
      
        # displating the reason for failed
        # request
        say "Failed to establish connection : 
        $response->{status}.$response->{reasons}";
    }
}
  
# calling the sub routine
getWebPage();

Producción:

the length of the web page : 
15175
the contents of the web page are :
<html code of the web page>

Descarga de múltiples páginas web usando HTTP::Tiny

El enfoque para la descarga de múltiples páginas web usando HTTP::Tiny es el mismo que se mencionó anteriormente. La única modificación es que aquí la URL de todas las páginas web se almacena en una array y recorremos la array mostrando el contenido de cada página web.

Perl

#!usr/bin/perl
  
# using the warnings pragma
# to generate warnings for
# erroneous code
use warnings;
  
# specifying the Perl version
use 5.010;
  
# calling the HTTP::Tiny module
use HTTP::Tiny;
  
# declaring the sub routine
sub getWebPages{
  
    # instantiating the HTTP client
    my $httpVariable = HTTP::Tiny->new;
      
    # array of URLs
    my @urls = ('http://www.google.com/',
    'https://www.geeksforgeeks.org/'
    );
      
    # start of foreach loop to
    # loop through the array of URLs
    foreach my $singleURL (@urls){
      
        # displaying user friendly message
        say 'downloading web page...';
          
        # variable to store the response
        my $response = $httpVariable->
        get($singleURL);
          
        # logic for successful connection
        if ($response->{success}){
            say $singleURL.
            " downloaded successfully";
              
            # displaying the length of
            # the web page
            # the contents can be displayed
            # similarly
            say "Length : length 
            $response->{content}";
        }
          
        # logic for unsuccessful connection
        else{
            say $singleURL.
            " could not be downloaded";
              
            # displaying the reason for
            # unsuccessful connection
            say "$response->{status}
            $response->{reasons}";
        }
    }
}
  
# calling the sub routine
getWebPages();

Producción:

downloading web page...
downloaded successfully
Length : 15175
<html content of the landing page of google>
downloading web page...
downloaded successfully
Length : <Length of the landing page of GFG>
<html content of the landing page of GFG>

Descargar imágenes usando Perl

En esta sección, veremos dos enfoques para descargar imágenes usando scripts de Perl. Para obtener la URL de estas imágenes, primero hacemos clic derecho sobre ellas. A continuación, hacemos clic en Copiar dirección de imagen en el menú desplegable y lo pegamos como la URL de la imagen.

Descarga de imágenes usando LWP::Simple

En este enfoque, usamos el módulo LWP::Simple y obtenemos el código HTTP usando la función getstore. En esta función, debemos especificar la URL de la imagen que se descargará y la ubicación para almacenar la imagen descargada. A continuación, comprobamos si el código es exitoso o no y mostramos el mensaje correspondiente al usuario.

Perl

#!usr/bin/perl
  
# using the strict pragma
use strict;
  
# using the warnings pragma
# to generate warnings for
# erroneous code
use warnings;
  
# specifying the Perl version
use 5.010;
  
# calling the module
use LWP::Simple;
  
# declaring the sub routine
sub getImage {
  
    # displaying a user friendly message
    say "Downloading ... ";
      
    # variable to store the status code
    # first parameter is the URL of the image
    # second parameter is the location
    # of the downloaded image
    my $statusCode = getstore
    ("https://www.geeksforgeeks.org/wp-content/uploads/gfg_200X200-1.png",
    "downloaded_image.png");
      
    # checking for successful
    # connection
    if ($statusCode == 200) {
        say "Image successfully downloaded.";
    }
    else {
        say "Image download failed.";
    }
}
  
# calling the sub routine
getImage();

Producción:

Downloading...
Image successfully downloaded.
(the downloaded image will be saved at the specified location
with the given name. If no location is specified then the image
would be saved in the current working directory.

Descarga de imágenes usando el módulo Image::Grab

Image::Grab es un módulo simple destinado a descargar las imágenes especificadas por sus URL. Funciona con imágenes que también pueden estar ocultas por algún método. En este enfoque, usamos el módulo Image::Grab y después de instanciarlo, pasamos la URL. A continuación, llamamos al método de captura y guardamos la imagen descargada en el disco.

Perl

#!usr/bin/perl
  
# using the strict pragma
use strict;
  
# using the warnings pragma to
# generate warnings for erroneous
# code
use warnings;
  
# specifying the Perl version
use 5.010;
  
# calling the Image::Grab module
use Image::Grab;
  
# instantiating the module
# and storing it in a variable
my $instantiatedImage = new Image::Grab;
  
# declaring the sub routine
sub getImage {
  
    # specifying the URL
    $instantiatedImage->url
    ('https://www.geeksforgeeks.org/wp-content/uploads/gfg_200X200-1.png');
      
    # calling grab to grab the image
    $instantiatedImage->grab;
      
    # creating a file to store
    # the downloaded image
    open(DOWNLOADEDIMAGE, '>downloaded_image1.png') || 
                        die'downloaded_image1.png: $!';
      
    # for MSDOS only
    binmode DOWNLOADEDIMAGE;
      
    # saving the image in the created
    # file
    print DOWNLOADEDIMAGE $instantiatedImage->image;
      
    # closing the file
    close instantiatedImage;
}
  
# calling the sub routine
getImage();

Producción:

The image is stored with the specified file name.

Imagen descargada:

Publicación traducida automáticamente

Artículo escrito por ag01harshit y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *