Extracción web con Jupyter Notebooks

Descubre cómo los Jupyter Notebooks simplifican la extracción web con codificación interactiva, análisis de datos y visualización.
13 min read
Web Scraping With Jupyter Notebooks blog image

En esta guía, aprenderás:

  • Qué son los Jupyter Notebooks
  • Por qué deberías usar Jupyter Notebooks para la extracción web
  • Cómo usarlo en un tutorial paso a paso
  • Casos de uso de Jupyter Notebooks para extraer datos en línea

¡Vamos allá!

¿Qué son los Jupyter Notebooks?

En el contexto de Jupyter, un notebook es «un documento que se puede compartir y que combina código de ordenador, descripciones en lenguaje sencillo, datos, tablas, gráficas y figuras, y controles interactivos».

Los notebooks proporcionan entornos interactivos para crear prototipos y explicar código, explorar y visualizar datos y compartir ideas. En particular, los notebooks producidos por la aplicación Jupyter Notebook se denominan Jupyter Notebooks.

La aplicación Jupyter Notebook es una aplicación servidor-cliente que permite editar y ejecutar documentos del notebook a través de un navegador web. Se puede ejecutar en un escritorio local o se puede instalar en un servidor remoto.

La interfaz de la aplicación Jupyter Notebook

Los Jupyter Notebooks proporcionan el denominado «núcleo», que es un «motor computacional» que ejecuta el código contenido en un documento de Notebook. En detalle, el núcleo ipython ejecuta código Python (pero existen núcleos en otros lenguajes):

Lanzar un nuevo documento a través del núcleo de ipython

La aplicación Jupyter Notebook incluye un panel de control que admite operaciones típicas, como mostrar archivos locales, abrir documentos de bloc de notas existentes, administrar los núcleos de los documentos y más:

El panel de control de Jupyter Notebooks

¿Por qué usar Jupyter Notebooks para la extracción web?

Los Jupyter Notebooks están diseñados específicamente para el análisis de datos y para fines de I+D, y son útiles para la extracción web debido a que:

  • Desarrollo interactivo: escribe y ejecuta código en fragmentos pequeños y manejables llamados celdas. Cada celda puede funcionar de forma independiente de las demás. Esto garantiza la simplificación de las pruebas y la depuración.
  • Organización: usa Markdown en sus celdas para documentar el código, explicar la lógica y añadir notas o instrucciones.
  • Integración con herramientas de análisis de datos: tras la extracción, puedes limpiar, procesar y analizar inmediatamente los datos en Python, ya que los Jupyter Notebooks se integran con bibliotecas como pandasmatplotlibseaborny más.
  • Reproducibilidad y uso compartido: los Jupyter Notebooks se pueden compartir fácilmente con otros como archivos .ipynb (su formato estándar) o convertirse a otros formatos como ReST, Markdown y más.

Ventajas y desventajas

Estos son las ventajas y desventajas de usar Jupyter Notebooks para la extracción de datos:

👍Ventajas:

  • Depuración paso a paso: como cada celda puede ejecutarse de forma independiente, puede subdividir el código de extracción de datos en diferentes celdas y ejecutarlas. Esto le permite depurar pequeños fragmentos de código ejecutando las celdas e interceptando errores a nivel de celda.
  • Documentación: usa Markdown en las celdas para crear archivos en los que puedas documentar el funcionamiento del código de extracción y describir la lógica detrás de las elecciones que has hecho.
  • Flexibilidad: en Jupyter Notebooks, puedes combinar la extracción web, la limpieza de datos y el análisis en un solo entorno. Esto permite alternar entre distintos entornos, como escribir el guion de extracción de datos en un entorno de desarrollo y analizar la información en otra plataforma.

👎 Desventajas:

  • No es ideal para proyectos a gran escala: los Jupyter Notebooks tienden a convertirse en documentos largos. Esto hace que no sean la opción ideal para proyectos de extracción de datos a gran escala.
  • Limitaciones de rendimiento: Los ordenadores portátiles tienden a ser lentos o no responden cuando se trabaja con conjuntos de datos de gran tamaño o se ejecutan guiones de extracción largos. Más información sobre cómo hacer que la extracción web sea más rápida.
  • No es ideal para la automatización: si necesitas ejecutar tu extractor de datos según un cronograma o implementarlo como parte de un sistema más grande, los Jupyter Notebooks no son la mejor opción. La razón es que están diseñados principalmente para la ejecución manual e interactiva de celdas.

Cómo usar Jupyter Notebooks para la extracción web: tutorial paso a paso

Ahora sabes por qué deberías usar Jupyter Notebooks para la extracción web. Por lo tanto, ¡estás listo para ver cómo puedes usarlos en un escenario de extracción del mundo real!

Requisitos previos

Para replicar este tutorial, tu sistema debe cumplir los siguientes requisitos previos:

  • Python 3.6 o superior: cualquier versión de Python superior a 3.6 es válida. Específicamente, instalaremos las dependencias mediante pip, que ya viene instalado con cualquier versión de Python superior a la 3.4.

Paso 1: configurar el entorno e instalar las dependencias

Supongamos que llamas a la carpeta principal de tu proyecto scraper/. Al final de este paso, la carpeta tendrá la siguiente estructura:

scraper/
    ├── analysis.ipynb
    └── venv/

Dónde:

  • analysis.ipynb es el Jupyter Notebook que contiene todo el código.
  • venv/ contiene el entorno virtual.

Puedes crear el directorio venv/ del entorno virtual de la siguiente manera:

python -m venv venv

Para activarlo, en Windows, ejecuta:

venv\Scripts\activate

De manera equivalente, en macOS/Linux, ejecuta:

source venv/bin/activate

En el entorno virtual activado, instala todas las bibliotecas necesarias para este tutorial:

pip install requests beautifulsoup4 pandas jupyter seaborn

Estas bibliotecas tienen los siguientes propósitos:

  • solicitudes: para realizar solicitudes HTTP.
  • beautifulsoup4: Para el análisis de documentos HTML y XML.
  • pandas: una potente biblioteca de análisis y manipulación de datos, ideal para trabajar con datos estructurados como tablas o archivos CSV.
  • jupyter: un entorno de desarrollo interactivo basado en la web para ejecutar y compartir código Python, ideal para el análisis y la visualización.
  • seaborn: una biblioteca de visualización de datos de Python basada en Matplotlib.

Para crear el archivo analysis.ipynb , primero tienes que entrar en la carpeta scraper/ :

cd scraper

Luego, inicializa un nuevo Jupyter Notebook con este comando:

jupyter notebook

Ahora puedes acceder a tu aplicación Jupyter Notebook a través de locahost8888.

Crea un nuevo archivo haciendo clic en la opción «Nuevo > Python 3»:

Creación de un nuevo archivo Jupyter Notebook

El nuevo archivo se llamará automáticamente untitled.ipynb. Puedes cambiarle el nombre en el panel de control:

Renombrar un nuevo archivo Jupyter Notebook

¡Genial! Ya está completamente preparado para la extracción web con Jupyter Notebooks.

Paso 2: define la página de destino

En este tutorial, extraerás los datos del sitio web worldometer. En particular, la página de destino es la relacionada con emisiones de CO2 en los Estados Unidos por año que proporciona datos tabulares como los siguientes:

Los datos tabulares sobre las emisiones de CO2 por año en los Estados Unidos

Paso 3: recuperar los datos

Puedes recuperar los datos de la página de destino y guardarlos en un archivo CSV de la siguiente manera:

import requests
from bs4 import BeautifulSoup
import csv

# URL of the website
url = "https://www.worldometers.info/co2-emissions/us-co2-emissions/"

# Send a GET request to the website
response = requests.get(url)
response.raise_for_status() 

# Parse the HTML content
soup = BeautifulSoup(response.text, "html.parser")

# Locate the table
table = soup.find("table") 

# Extract table headers
headers = [header.text.strip() for header in table.find_all("th")]

# Extract table rows
rows = []
for row in table.find_all("tr")[1:]:  # Skip the header row
    cells = row.find_all("td")
    row_data = [cell.text.strip() for cell in cells]
    rows.append(row_data)

# Save the data to a CSV file
csv_file = "emissions.csv"
with open(csv_file, mode="w", newline="", encoding="utf-8") as file:
    writer = csv.writer(file)
    writer.writerow(headers)  # Write headers
    writer.writerows(rows)    # Write rows

print(f"Data has been saved to {csv_file}")

Esto es lo que hace este código:

  • Utiliza la bibliotecarequests para enviar una solicitud GET a la página de destino mediante el método requests.get ()y comprueba si hay errores de solicitud mediante el método response.raise_for_status ().
  • Usa BeautifulSoup para analizar el contenido HTML creando una instancia de la clase BeautifulSoup () y buscando el selector table con el método soup.find (). En particular, este método es útil para localizar la tabla que contiene los datos. Si no estás familiarizado con esta sintaxis, consulta nuestra guía sobre la extracción de datos web de BeautifulSoup.
  • Utiliza la comprensión de una lista para extraer el encabezado de la tabla.
  • Utiliza un bucle for para recuperar todos los datos de la tabla y omitir la fila del encabezado.
  • Por último, abre un nuevo archivo CVS y añade allí todos los datos recuperados.

Puedes pegar este código en una celda y ejecutarlo pulsando SHIFT+ENTER.

Otra forma de ejecutar la celda es seleccionarla y pulsar el botón «Ejecutar» del panel:

Ejecutar una celda en un Jupyter Notebook

Sorprendente, mira cómo el mensaje «Los datos se han guardado en emissions.csv» te notifica que la operación de extracción de datos se ha realizado correctamente.

Paso 4: asegúrate de que los datos son correctos

Ahora que ha guardado los datos en un archivo CVS. Abre el archivo CSV y verifica si todo ha salido bien; a veces puedes enfrentar problemas con las conversiones. Para ello, puedes escribir el siguiente código en una nueva celda:

import pandas as pd

# Load the CSV file into a pandas DataFrame
csv_file = "emissions.csv"
df = pd.read_csv(csv_file)

# Print the DataFrame
df.head()

Este código hace lo siguiente:

  • Abre el archivo CSV como un marco de datos, gracias a pandas, con el método pd.read_csv ().
  • Ejecuta las cinco primeras filas del marco de datos con el método df.head ().

He aquí el resultado previsto:

Las cinco primeras filas del marco de datos

¡Estupendo! Solo queda representar los datos extraídos.

Paso 5: visualizar los datos

Ahora puedes realizar cualquier análisis de datos que prefieras. Por ejemplo, puedes usar seaborn para crear un gráfico de líneas que muestre la tendencia de las emisiones de CO2 a lo largo de los años. Hazlo de la siguiente manera:

import seaborn as sns
import matplotlib.pyplot as plt

# Load the CSV file into a pandas DataFrame
csv_file = "emissions.csv"
df = pd.read_csv(csv_file)

# Clean column names be removing extra spaces
df.columns = df.columns.str.strip().str.replace('  ', ' ')

# Convert 'Fossil CO2 Emissions (tons)' to numeric
df['Fossil CO2 Emissions (tons)'] = df['Fossil CO2 Emissions (tons)'].str.replace(',', '').astype(float)

# Ensure the 'Year' column is numeric
df['Year'] = pd.to_numeric(df['Year'], errors='coerce')
df = df.sort_values(by='Year')

# Create the line plot
plt.figure(figsize=(10, 6))
sns.lineplot(data=df, x='Year', y='Fossil CO2 Emissions (tons)', marker='o')

# Add labels and title
plt.title('Trend of Fossil CO2 Emissions Over the Years', fontsize=16)
plt.xlabel('Year', fontsize=12)
plt.ylabel('Fossil CO2 Emissions (tons)', fontsize=12)
plt.grid(True)
plt.show()

Esto es lo que hace este código:

  • Usa pandas para:
    • Abrir el archivo CSV.
    • Limpiar los nombres de las columnas eliminando los espacios adicionales con el método df.columns.str.strip () .str.replace ('', '') (si no lo usas, obtendrás errores en el código de este ejemplo).
    • Acceder a la columna «Emisiones de CO2 fósil (toneladas)» y convertir los datos en números con el método df ['Emisiones de CO2 fósil (toneladas) '] .str.replace (', ', «) .astype (float).
    • Acceder a la columna «Años», convierte los valores en números con el método pd.to_numeric ()y ordena los valores en orden ascendente con el método df.sort_values ().
  • Utilizar las bibliotecas matplotlib y seaborn (que se basa en matplotlib, por lo que se instala al instalar seaborn) para crear la gráfica real.

He aquí el resultado previsto:

La gráfica resultante

¡Genial! Así de poderoso es la extracción de datos de Jupyter Notebook.

Paso 6: juntarlo todo

Así es como se ve el documento final de extracción web de Jupyter Notebook:

El documento completo de Jupyter Notebook

Ten en cuenta la presencia de diferentes bloques, cada uno con su salida.

Casos de uso del la extracción web de Jupyter Notebook

¡Es hora de analizar los casos prácticos del uso de Jupyter Notebooks mientras se hace la extracción de datos web!

Tutoriales

No olvides que cada celda de un Jupyter Notebook se puede ejecutar de forma independiente. Con la compatibilidad añadida con Markdown, la biblioteca se convierte en una excelente herramienta para crear tutoriales paso a paso.

Por ejemplo, puedes alternar entre las celdas que contienen código y las que explican la lógica y el razonamiento detrás de él. En el caso de la extracción de datos web, los Jupyter Notebooks son particularmente útiles. Se pueden usar para crear tutoriales para desarrolladores jóvenes, guiándolos en cada paso del proceso.

Ciencia e investigación (I+D)

Debido a su naturaleza interactiva y a la capacidad de exportarse fácilmente para colaborar, los Jupyter Notebooks son ideales para fines de investigación e I+D. Esto es especialmente cierto para la extracción de datos web. Por ejemplo, al rastrear sitios web que requieren varias rondas de prueba y error, puedes guardar todas tus pruebas en un solo bloc de notas y usar Markdown para resaltar las pruebas que han tenido éxito.

Exploración de datos

La biblioteca Jupyter se ha diseñado específicamente para la exploración y el análisis de datos. Esto también la convierte en una herramienta perfecta para extracción web para el aprendizaje automático.

Este caso de uso se aplica directamente al ejemplo que codificaste anteriormente. Recuperó los datos del sitio web y los analizó de inmediato, todo dentro del mismo entorno de codificación.

Conclusión

En esta publicación, descubriste cómo los Jupyter Notebooks pueden ser una poderosa herramienta para la extracción web, ya que ofrecen un entorno interactivo y flexible para la extracción y el análisis de datos. Sin embargo, cuando se trata de escalar sus operaciones de extracción de datos web o automatizar tareas, es posible que Jupyter Notebooks no sea la solución más eficiente.

Ahí es donde entran en juego nuestros extractores de datos web. Tanto si eres un desarrollador que busca soluciones basadas en API como si buscas una opción sin código, nuestros extractores de datos web están diseñados para simplificar y mejorar sus esfuerzos de recopilación de datos. Con funciones como puntos de enlace dedicados para más de 100 dominios, gestión de solicitudes masivas, rotación automática de IP y resolución de CAPTCHA, puedes extraer datos estructurados sin esfuerzo y a gran escala. ¡Crea una cuenta gratuita de Bright Data hoy mismo para probar nuestras soluciones de extracción y probar nuestros proxis!

No se requiere tarjeta de crédito