Extracción de datos con Python renderizando javascript

Web Scraping es el proceso de extracción de información de sitios web para ser utilizado en otra aplicación. Las herramientas de scraping se utilizan para extraer información de los sitios web que no proporcionan una API para extraer los datos deseados. En los últimos años, el scraping web ha sido común con sitios web dinámicos, como los blogs de gestión de empresas, sitios de comercio electrónico, las redes sociales y foros.

A veces puede ser difícil de extraer datos de un sitio web que no tiene una misma estructura HTML sino que esta es dinámica. Aunque por suerte esto no es lo usual, y lo más común es que el HTML de un mismo dominio se repita su estructura por lo que es muy fácil de recorrer.

Extraer información de sitios web con Python es una forma eficaz de recopilar datos. Python es un lenguaje de programación potente que es fácil de aprender y puede recoger rápidamente los datos de sitios web. En este artículo te voy a mostrar una manera para scrapear datos con Python.

Que vamos a scrapear

Para este tutorial vamos a utilizar el entorno de prueba que he creado en ParaScrapear.com y concretamente en la página especifica que genera contenido con JavaScript.

 

Pero si abrimos el código fuente

view-source:https://parascrapear.com/javascript

En realidad el texto del HTML que muestra en la etiqueta <div id=”javascript”> es:

Si ves esto NO tienes activado el JavaScript

en lugar de como se muestra en la captura

Eureka!!! Has logrado ver contenido generado por el fichero JavaScript que no aparece de primeras en el documento HTML.

Vamos a utilizar esta url para ver los pasos que necesitamos dar para renderizar el JS.

Requisitos para scrapear con Python

Necesitamos arrancar nuestro proyecto de python y la mejor manera es comenzar con las librerías básicas que se necesitan. Vamos a usar 2 librerías que son request y BeatufilSoup para comenzar. Por lo que vamos a utilizar el instalador de librerías de python que es pip

pip3 install requests
pip3 install beautifulsoup4

Una vez que tenemos estas librerías instaladas pasamos a crear nuestro script.

Comenzando el script de Python para scrapear

Vamos a escribir un primer script para ver cual es el resultado, lo guardaré en un fichero llamado scriptrequests.py. Si deseas conocer como funciona las librerias de requests y BeautifulSoup te recomiendo este artículo.

import requests
from bs4 import BeautifulSoup

resp = requests.get("https://parascrapear.com/javascript")

soup = BeautifulSoup(resp.text, "html.parser")
print(soup.find(id='javascript').text)

Al ejecutar este script el resultado es el siguiente:

Como podemos ver no ha renderizado el javascript, esto lo vamos a ver en el siguiente apartado como tenemos que hacerlo.

Renderizar el Javascript en Python

Para hacer el trabajo de renderizar ya hemos visto que la librería requests no es suficiente. lo que vamos a necesitar es utilizar la librería HTMLSession, con la que podremos interpretar el código javascript y devolver el HTML del resultado.

Antes de crear el script debemos instalar esta librería y en mi caso tuve que hacer un upgrade de requests con sudo para que me instalara todo correctamente te dejo las líneas que puse en mi terminal:

sudo pip3 install --upgrade requests
pip3 install requests-html

Crearemos este segundo script en el fichero llamado scripthtmlsession.py y este es el contenido:

from requests_html import HTMLSession
from bs4 import BeautifulSoup

session = HTMLSession()

resp = session.get("https://parascrapear.com/javascript")

resp.html.render()

soup = BeautifulSoup(resp.html.html, "html.parser")
print(soup.find(id='javascript').text)

Al ejecutar este script el resultado es el siguiente:

Como puedes ver en este caso si que ha funcionado correctamente y hemos logrado nuestro objetivo que era scrapear una web en la que parte de su contenido está creado por JavaScript.

Discord Grupo Discord

Usamos cookies para mejorar la experiencia del usuario. Selecciona aceptar para continuar navegando. Política de cookies

Ir arriba