DEV Community

SERGIO ROJAS
SERGIO ROJAS

Posted on

Web Scraping en Python: Herramientas y Técnicas para Recopilar Datos en la Web

El mundo del desarrollo web es un viaje en constante evolución, y en mi propia travesía, decidí dar un giro inesperado. Siendo un desarrollador Front-end apasionado por el diseño web, me aventuré a dar un salto audaz hacia el mundo del desarrollo Back-end.
Esta transición no solo amplió mis horizontes, sino que también me permitió explorar una fascinante herramienta: el web scraping.

En este artículo, compartiré mi experiencia y las lecciones aprendidas al superar el desafío de cambiar mi enfoque de desarrollo y sumergirme en el emocionante mundo del web scraping.

Inicialmente parti de investigar cada caso expuesto en la red sobre web scraping, tanto las mejores herramientas como el uso en donde se pueden aplicar. Esto me ayudo a mantener el stack de usar Python para obtener los datos generados por medio de web scraping, ya que se puede manejar de una manera mas simple mediante este lenguaje por medio de numpy.

Es recomendable investigar sobre la forma en la que se debe realizar web scraping a la pagina que tengas en mente ya que pueden obtener la información por medio de Beautiful Soup o Selenium *******,******* en paginas donde la información esta envuelta de forma dinámica es recomendable usar Selenium como para este ejemplo y guía.

Ya dentro de un archivo de desarrollo de python, inicie por descargar Selenium, la cual es una es un entorno de pruebas de software para aplicaciones basadas en la web, que nos permite tomar la información de la pagina web y si es el caso poder realizar acciones dinámicas sobre pagina web de manera automática.

pip install Selenium
Enter fullscreen mode Exit fullscreen mode

Al realizar la instalación es bueno conocer que se necesita un driver para que Selenium haga interfaz con su navegador seleccionado. Estos son algunos links a algunos de los drivers más populares y con mayor integración de casos prácticos:

En este caso use Chrome como ejemplo de navegador, esto ya que al ser usado en su mayoría de casos por temas de navegación me siento mas comodo al conocer su configuración. Seguido de tener el navegador el cual tomaremos como prueba, pasamos a realizar la configuración necesaria para poder acceder desde selenium a una ruta establecida y poder realizar web scraping.

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By

#Options

browser = webdriver.Chrome()

browser.get('http://www.pagina_prueba_aqui.com')
elem = browser.find_element(By.NAME, 'p')  # Find the search box
browser.quit()
Enter fullscreen mode Exit fullscreen mode

Para poder realizar este paso de configuración, es necesario poder incluir algunas herramientas desde Selenium, tales como WebDriverWait, la cual permite tener un control sobre el tiempo que se demora la página en cargar la información según la velocidad de conexión. Con by, buscaremos los elementos de HTML dentro de la página en la cual obtendremos la información deseada.

Encontrarás numerosos artículos, blogs y videos que te brindarán valiosa información para desarrollar una amplia gama de proyectos que hagan uso del web scraping. El propósito final de este artículo es apoyarte en esta travesía, ofreciéndote orientación sobre los posibles errores que podrían surgir a lo largo de tu desarrollo. Estos obstáculos, en su mayoría, me llevaron tiempo comprender y resolver, por lo que compartiré mis experiencias y soluciones para ayudarte a evitar esas dificultades y avanzar con éxito en tu proyecto.

Uno de los errores que me costó entender y poder sobrellevar es el tiempo que se demora en cargar la información dentro de la página web. Puede que tengas un estimado de 5 segundos, pero eso no nos asegura que la información exista dentro de ese intervalo de tiempo. Para esto, es bueno tener control de la existencia de la etiqueta antes de extraer la información. Esto se debe a que por defecto el proceso de búsqueda de información se ejecuta antes de tener control sobre ella. En este caso, es bueno manejar excepciones y un número de intentos por defecto.

delay = 3 # seconds
try:
    myTag = WebDriverWait(browser, delay).until(EC.presence_of_element_located((By.ID, 'id_element')))
    print "Page is ready!"
except TimeoutException:
    print "Loading took too much time!"
Enter fullscreen mode Exit fullscreen mode

Un error muy comun es que si se desea que al ejecutar tu automatización de por medio de scraping ..

Top comments (0)