WEB SCRAPING CON PYTHON

El que busca tarde que temprano lo encuentra

Dicho Mexicano

Genial este es mi segundo articulo relacionado con el primer articulo del hello world. Y al parecer el programita que será la base para algo mas chido. Va progresando y si en el otro artículo hablamos de crear carpetas de una manera recursiva , Ahora sera de descargar imágenes. Y usaremos una técnica que para uno es legal y para otros no tanto. Scraping-Web. El arte de escarbar la web.

Bases

Scraping

es una técnica utilizada mediante programas de software para extraer información de sitios web. Usualmente, estos programas simulan la navegación de un humano en el WWW. Esta esta relaciona con procesos de indexado de información y transformado de la información; ideal para aquellas paginas que no poseen una API. Uno de los grandes dilemas de esta técnica es el gran debate de si es legal o ilegal en fin les dejo este articulo que nos habla un poco al respecto de este tema. Enlace

DOM

El Modelo de Objetos del Documento (DOM) es un API estandarizada por la W3C para documentos HTML y XML. Proporciona una representación estructural del documento, permitiendo la modificación de su contenido o su presentación visual. Esencialmente, comunica las páginas web con los scripts o los lenguajes de programación

RegEx

Las abreviaturas regex y regexp denotan expresiones regulares que se utilizan en la informática programación y optimización de motores de búsqueda. Las expresiones regulares se pueden utilizar para describir cadenas y números de cadenas en una forma lógica general con el fin de buscarlas, sustituirlas, manipularlas o procesarlas.

Cada uno de estos temas son muy extensos y profundizar al respecto de estos solo puede causar confusión para algo practico. Pero tener encuenta esto para escalar cualquier proyecto que se tenga de scraping.

Librerías

Como estamos en la fase de aprendizaje de python vamos a configurar nuestro entorno para darle caña a esto. Así que prepareis vuestro PIP

Existen otras librerías de scrap pero BeatifulSoup se me hizo la idónea para esto, pero echarle un ojo a scrapy y selenium

Código

Historia de usuario : Yo como analista debo entrenar una red neuronal y para eso es necesario adquirir datasets de positivos y negativos para que los algoritmos de detención funcionen correctamente.

import wget, requests
from bs4 import BeautifulSoup

class Spider:
    #pagina de prueba
    Page = 'https://##########/WebContent/digital_catalog_2/jsp/view_subcla###s.###?'
    #Paginacion si es que la pagina lo permite si no solo agregar [none]
    Pagination = 'none' 

    def getContentResource(self,folder,container):          

        _page = self.Page.strip()
        if not self.Pagination == 'none' :
            _params = self.Pagination.split(';')
            for i in range( int(_params[0]) , int(_params[1]) ) :
                page =  requests.get(_page+_params[2]+str(i))
                soup = BeautifulSoup(page.content, 'html.parser')
                results = soup.findAll('div',{'class': container })
                self._downloadImg(results,folder)
        else :
            page = requests.get(_page)
            soup = BeautifulSoup(page.content, 'html.parser')
            results = soup.findAll('div',{'class': container })
            self._downloadImg(results,folder)

Para esto debemos tener conocimiento de como esta estructurado el HTML y poder acceder al DOM. Esto lo puedes hacer con la herramienta de FIREFOX de inspeccionar elementos.

Pagina de prueba

Las variables Page es la url de la pagina scrapear ejemplo Page = ‘https:www.junglacode.org’ y Pagination la cual te da la posibilidad interactuar con un catalogo que permita parámetros por GET, En caso que no con se coloque la leyenda ‘none’. En caso contrario necesitara ver cual es el request que le enviara la petición ejemplo :

www.elperro.com/productos/1

Como se podran dar cuanta ustedes podran interactuar con 1 hasta donde acabe el catalogo. En esta caso las variables quedara :

Page = ‘www.elperro.com/’ y Pagination = ‘1;11;productos/’. #Pagination esta separa por ‘;’ donde el primer carácter es numero inicial del catalogo el segundo el limite del catalogo y tercero La petición GET para acceder a cada pagina

La función getContentResource(self,folder,container) . Necesita un ruta <<folder>> en donde se va almacenar las imágenes y un contenedor<<container>>. Que no es mas que la clase de la capa que contiene la imagen en este caso como en la imagen anterior de ejemplo la capa contenedora es la dc_product

#Ejecución del script
peter = Spider()
peter.getContentResource('.','dc_product')
Descargando desde la terminal de VsCode
Images descargadas. Funciona si Funciona

Bueno pues por lo visto el script funciona hay mejoras que se tiene que hacer como implementaciones para peticiones AJAX. Login automático , Evitar que el script sea detectado como un BOT en fin. Seguiré informando sobre este programita. Hasta la próxima queridos lectores y únicos amigos

Referencias

https://developer.mozilla.org/es/docs/DOM

https://es.ryte.com/wiki/RegEx

Deja un comentario

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