Cómo raspar un sitio web JavaScript con Python

Cómo hacerlo, Python, Scraping, Nov-15-20225 minutos de lectura

Los navegadores web utilizan Javascript para crear una experiencia dinámica e interactiva para el usuario. La mayoría de las aplicaciones y funciones que hacen que Internet sea indispensable en la vida moderna están codificadas en forma de Javascript. En los primeros tiempos de Javascript, las páginas web eran estáticas y ofrecían poca interacción al usuario, aparte de hacer clic en los enlaces.

Índice

Los navegadores web utilizan Javascript para crear una experiencia dinámica e interactiva para el usuario. La mayoría de las aplicaciones y funciones que hacen que Internet sea indispensable en la vida moderna están codificadas en forma de Javascript. Considerando las primeras encarnaciones de Javascript, las páginas web eran estáticas y ofrecían poca interacción al usuario, más allá de hacer clic en enlaces y cargar nuevas páginas. 

A continuación se indican algunas de las mejoras dinámicas del sitio web que se realizan mediante Javascript.

  • Validación de entradas de formularios web
  • Animación de elementos de la página, como cambio de tamaño, reubicación y desvanecimiento.
  • Cargar nuevos datos sin recargar la página
  • Reproducir audio y vídeo
  • Reparación de los problemas de compatibilidad del navegador

Puede utilizar el scraping para recopilar datos estructurados de sitios web de forma automatizada. El web scraping también se conoce como extracción de datos web. Algunos de los principales casos de uso del web scraping son:

  • Seguimiento de las noticias
  • Inteligencia de precios
  • Generación de clientes potenciales
  • Control de precios
  • Estudios de mercado

Entendamos primero la necesidad de raspar sitios web.

¿Por qué es necesario raspar un sitio web Javascript?

Las empresas utilizan el web scraping para aprovechar la gran cantidad de datos públicos disponibles y tomar decisiones más inteligentes. A continuación se indican algunas de las áreas en las que se utiliza el web scraping.

  • Comercio electrónico
  • Redes sociales
  • Banca 
  • Finanzas
  • Marketing 
  • Inmobiliario
  • Finanzas
  • Optimización de motores de búsqueda
  • Contactos

A continuación se exponen las razones por las que las empresas necesitan raspar los sitios web.

Automatización - No es posible copiar y pegar cada dato de un sitio web. Las empresas utilizan softwares de scraping para automatizar la mayoría de sus procesos asociados.

Gestión de datos - No se pueden utilizar bases de datos y hojas de cálculo para gestionar números y cifras en un sitio web configurado en HTML. Por eso, las empresas utilizan herramientas de web scraping para gestionar sus datos.

Listados inmobiliarios - Los agentes inmobiliarios utilizan el web scraping para poblar su base de datos de propiedades disponibles en alquiler o en venta. 

Datos comparativos de sitios de compras - Las empresas utilizan el web scraping para extraer datos de precios y productos de cada minorista, de modo que puedan ofrecer a sus usuarios los datos comparativos que desean. 

Estadísticas y perspectivas del sector: las empresas utilizan el scraping para crear bases de datos masivas y extraer de ellas perspectivas específicas del sector. Por ejemplo, una empresa puede extraer y analizar toneladas de datos sobre el precio del petróleo. A continuación, puede vender sus datos a empresas petroleras de todo el mundo.

Raspado de un sitio web Javascript con Python

Veamos cómo utilizar Selenium para scrapear sitios web Javascript.

Instalación de la biblioteca Selenium

Puede instalar Selenium utilizando el siguiente comando.

pip install selenium

Instalación del controlador Web

¿Sabes que Selenium simula un navegador real? No utiliza su instalación de Chrome, sino que utiliza un controlador para ejecutar un navegador. Los controladores web de Selenium se refieren tanto a los enlaces de lenguaje como a las implementaciones del código de control del navegador individual. Tienes que descargar el controlador web, y puedes añadirlo a la variable de entorno path. Nosotros utilizaremos el controlador web de Firefox y puedes instalarlo siguiendo este enlace.

Ejemplo

Consideremos un ejemplo sencillo de selenium que consiste en recopilar el título de un sitio web. Para ello, primero importaremos webdriver de selenium en un archivo python como se muestra a continuación:

from selenium import webdriver

Tenemos que mencionar la ruta donde se encuentra el webdriver. Después, tenemos que inicializar el controlador web de Firefox.

RUTA_WEBDRIVER = './'
driver = webdriver.Firefox(WEBDRIVER_PATH)

Ahora definimos la URL para obtener el título de la página web.

URL = 'https://www.google.com'
driver.get(URL)
imprimir (driver.title)

Al ejecutar el código anterior se abre una ventana de Firefox que imprime en la consola el título del sitio web. Definimos la URL de Google como ejemplo en este caso, por lo que el resultado será así:

Esta es la página de google desde el controlador web de firefox. El título impreso en la consola será como:

Tenemos que cerrar manualmente la ventana de Firefox que se abrió. Añadiremos driver.quit() al final de nuestro código para que la ventana se cierre automáticamente una vez terminado el trabajo. 

from selenium import webdriver 

RUTA_DEL_CONTROLADOR_WEB = './'
driver = webdriver.Firefox(WEBDRIVER_PATH) 

URL = 'https://www.google.com'
driver.get(URL)
print (driver.title)
driver.quit()

En caso de que quieras recoger datos de un sitio web dinámico, puedes seguir los mismos pasos mencionados anteriormente. Por ejemplo, si desea recuperar el título de Youtube, puede utilizar el siguiente código.

from selenium import webdriver 
 
RUTA_DEL_CONTROLADOR_WEB = './' 
driver = webdriver.Firefox(WEBDRIVER_PATH) 
URL = 'https://www.youtube.com'
driver.get(URL)
print (driver.title)
driver.quit()

Intentemos algo nuevo aquí. Podemos editar el cuadro de búsqueda y llenarlo con la palabra "Selenium" utilizando la clase "Keys" como se muestra a continuación.

from selenium.webdriver.common.keys import Claves

Después de inicializar el controlador web de firefox y obtener el título de Youtube, creamos un objeto que contiene la caja de búsqueda con xpath.

search_box = driver.find_element_by_xpath('//input[@id="search"]')

A continuación, editamos el contenido del cuadro de búsqueda y lo rellenamos con la palabra "Selenium".

search_box.send_keys('Selenium')

Una vez rellenado el cuadro de búsqueda con el contenido deseado, podemos pulsar "Intro" para activar la búsqueda.

cuadro_buscar.enviar_claves(Claves.ENTER)

Puede ver en la imagen inferior que el cuadro de búsqueda de Youtube contiene la palabra "Selenium".

Utilizar un proxy

Los proxies son necesarios cuando se necesita un contenido web localizado. También son necesarios cuando se envían demasiadas peticiones a un sitio web en un corto periodo de tiempo. Se necesitan proxies para Selenium cuando se requieren pruebas automatizadas. Sin embargo, para utilizar un proxy Selenium para el scraping de un sitio web Javascript, es necesario utilizar un cable Selenium que extienda los bindings de Selenium y dé acceso a las peticiones subyacentes realizadas por el navegador.

Para utilizar Selenium con un proxy, el siguiente es el paquete que necesita instalar.

from selenium wire import webdriver

Después de instalar la biblioteca selenium-wire de Python, debe mencionar lo siguiente:

  • nombre_de_usuario_proxy
  • contraseña_proxy
  • proxy_url
  • puerto_proxy

Aquí mencionamos un número de puerto aleatorio 8080 como ejemplo. Puede establecer el nombre de usuario, contraseña y URL del sitio web deseado de su propia elección.

proxy_username = "USER_NAME"
proxy_password = "PASSWORD"
proxy_url = "Any Website URL"
proxy_port = 8080

options = {
    "proxy": {
        "http": f"http://{proxy_username}:{proxy_password}@{proxy_url}:{proxy_port}",
        "verify_ssl": False,
    },
}

Para el controlador web Selenium, los proxies residenciales son la mejor opción. Esto se debe a que no se detectan fácilmente a diferencia de los proxies de centros de datos. Enrutan las peticiones de los clientes a través de IPs residenciales y ganan más confianza que las IPs de centros de datos. También son útiles para acceder a sitios web complejos que utilizan Javascript como Youtube, Google, Instagram, etc.

Por qué usar proxies para raspar un sitio web JS

Es necesario utilizar proxies para el scraping de un sitio web por las siguientes razones:

  • Los proxies se utilizan para mejorar la seguridad y equilibrar el tráfico de Internet de un sitio web.
  • Los web scrapers necesitan utilizar proxies para ocultar su identidad y hacer que su tráfico parezca el de un usuario normal.
  • Los proxies también se utilizan para proteger los datos personales de los internautas.
  • Los proxies ayudan a acceder a los sitios web bloqueados por el mecanismo de censura del país.
  • Puede rastrear sitios web utilizando proxies de forma fiable. 
  • Los proxies son valiosos cuando se necesita extraer datos de productos de minoristas en línea. Esto se debe a que le permiten realizar su solicitud desde una región geográfica concreta, y puede acceder al contenido específico que el sitio web muestra para esa ubicación.
  • Los proxies le ayudan a realizar un gran número de peticiones al sitio web de destino sin ser baneado.
  • Puede utilizar proxies para realizar conexiones concurrentes ilimitadas al mismo sitio web o a sitios web diferentes.

Conclusión

El raspado web es importante, ya que puede utilizarse para:

  • Scraping de anuncios de productos/servicios y hacer insights de sus presupuestos
  • Predecir la tendencia de la moda para seguir siendo competitivo
  • Rastreo de canales de medios sociales y descubrimiento de clientes potenciales, etc.

Además hemos discutido cómo se puede utilizar Selenium para raspar Javascript sitios web destacados en Python. Usted puede raspar el contenido de sitios web estáticos, así como sitios web dinámicos como Youtube. También es necesario utilizar proxies Selenium para pruebas automatizadas. Los mejores proxies que puede utilizar son los proxies residenciales , ya que son súper rápidos y no pueden ser fácilmente detectados a diferencia de otros proxies.

Espero que hayas entendido cómo scrapear un sitio web Javascript usando Python.