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