Construyendo un raspador de datos meteorológicos interactivos en Google Colab: una guía de código para extraer, mostrar y descargar datos de pronóstico en vivo usando Python, Beautifulsoup, solicitudes, Pandas y IpyWidgets

¡En este tutorial, construiremos un proyecto de raspado web interactivo en Google Colab! Esta guía lo guiará a través de la extracción de datos de pronóstico del tiempo en vivo del Servicio Meteorológico Nacional de los Estados Unidos. Aprenderá a configurar su entorno, escribir un script de Python usando Beautifulsoup y solicitudes, e integrar una interfaz de usuario interactiva con IpyWidgets. Este tutorial proporciona un enfoque paso a paso para recopilar, mostrar y guardar datos meteorológicos, todo dentro de un solo cuaderno Colab autónomo.

!pip install beautifulsoup4 ipywidgets pandas

Primero, instalamos tres bibliotecas esenciales: BeautifulSoup4 para analizar contenido HTML, ipywidgets para crear elementos interactivos y pandas para la manipulación y análisis de datos. Ejecutarlo en su cuaderno Colab asegura que su entorno esté completamente preparado para el proyecto de raspado web.

import requests
from bs4 import BeautifulSoup
import csv
from google.colab import files
import ipywidgets as widgets
from IPython.display import display, clear_output, FileLink
import pandas as pd

Importamos todas las bibliotecas necesarias para construir un proyecto de raspado web interactivo en Colab. Incluye solicitudes para manejar solicitudes HTTP, BeautifulSoup de BS4 para analizar HTML y CSV para administrar las operaciones de archivos CSV. Además, trae archivos de Google.Colab para descargas de archivos, ipywidgets y herramientas de visualización de Ipython para crear una interfaz de usuario interactiva y pandas para manipulación y pantalla de datos.

def scrape_weather():
    """
    Scrapes weather forecast data for San Francisco from the National Weather Service.
    Returns a list of dictionaries containing the period, short description, and temperature.
    """
    url="https://forecast.weather.gov/MapClick.php?lat=37.7772&lon=-122.4168"
    print("Scraping weather data from:", url)
    response = requests.get(url)
   
    if response.status_code != 200:
        print("Error fetching page:", url)
        return None
   
    soup = BeautifulSoup(response.text, 'html.parser')
    seven_day = soup.find(id="seven-day-forecast")
    forecast_items = seven_day.find_all(class_="tombstone-container")
   
    weather_data = []
   
    for forecast in forecast_items:
        period = forecast.find(class_="period-name").get_text() if forecast.find(class_="period-name") else ''
        short_desc = forecast.find(class_="short-desc").get_text() if forecast.find(class_="short-desc") else ''
        temp = forecast.find(class_="temp").get_text() if forecast.find(class_="temp") else ''
       
        weather_data.append({
            "period": period,
            "short_desc": short_desc,
            "temp": temp
        })
   
    print(f"Scraped {len(weather_data)} forecast entries.")
    return weather_data

Con la función anterior, recuperamos el pronóstico del tiempo para San Francisco del Servicio Meteorológico Nacional. Hace una solicitud HTTP a la página de pronóstico, analiza el HTML con Beautifulsoup y extrae detalles como el período de pronóstico, la descripción y la temperatura de cada entrada. Los datos recopilados se almacenan como una lista de diccionarios y se devuelven.

def save_to_csv(data, filename="weather.csv"):
    """
    Saves the provided data (a list of dictionaries) to a CSV file.
    """
    with open(filename, "w", newline="", encoding='utf-8') as f:
        writer = csv.DictWriter(f, fieldnames=["period", "short_desc", "temp"])
        writer.writeheader()
        writer.writerows(data)
    print(f"Data saved to {filename}")
    return filename

Ahora, esta función toma los datos meteorológicos raspados de una lista de diccionarios y los escribe en un archivo CSV utilizando el módulo CSV de Python. Abre el archivo en modo de escritura con la codificación UTF-8, inicializa a un escritor dictado con Names de campo predefinidos (“Período”, “Short_Desc” y “Temp”), escribe la fila del encabezado y luego escribe todas las filas de datos.

out = widgets.Output()


def on_button_click(b):
    """
    Callback function that gets executed when the "Scrape Weather Data" button is clicked.
    It scrapes the weather data, saves it to CSV, displays the data in a table,
    and shows a download link for the CSV file.
    """
    with out:
        clear_output()
        print("Starting weather data scrape...")
        data = scrape_weather()
        if data is None:
            print("Failed to scrape weather data.")
            return
       
        csv_filename = save_to_csv(data)
       
        df = pd.DataFrame(data)
        print("\nWeather Forecast Data:")
        display(df)
       
        print("\nDownload CSV file:")
        display(FileLink(csv_filename))


button = widgets.Button(description="Scrape Weather Data", button_style="success")
button.on_click(on_button_click)


display(button, out)

Finalmente, el último fragmento establece una interfaz de usuario interactiva en Colab usando ipywidgets que, cuando se activan, raspan los datos meteorológicos, la muestran en una tabla y proporciona un enlace de descarga de CSV. Combina eficientemente el raspado web y la interacción del usuario en una configuración de cuaderno compacto.

Muestra de salida

En este tutorial, demostramos cómo combinar el raspado web con una interfaz de usuario interactiva en un entorno de Google Colab. Construimos un proyecto completo que obtiene datos meteorológicos en tiempo real, los procesa usando Beautifulsoup y muestra los resultados en una tabla interactiva mientras ofrece una opción de descarga CSV.


Aquí está el Cuaderno de colab para el proyecto anterior. Además, no olvides seguirnos Gorjeo y únete a nuestro Canal de telegrama y LinkedIn GRsalpicar. No olvides unirte a nuestro Subreddit de 80k+ ml.

🚨 Lectura de lectura recomendada Liberaciones de investigación de IA: un sistema avanzado que integra el sistema de IA del agente y los estándares de cumplimiento de datos para abordar las preocupaciones legales en los conjuntos de datos de IA


Asif Razzaq es el CEO de MarktechPost Media Inc .. Como empresario e ingeniero visionario, ASIF se compromete a aprovechar el potencial de la inteligencia artificial para el bien social. Su esfuerzo más reciente es el lanzamiento de una plataforma de medios de inteligencia artificial, MarktechPost, que se destaca por su cobertura profunda de noticias de aprendizaje automático y de aprendizaje profundo que es técnicamente sólido y fácilmente comprensible por una audiencia amplia. La plataforma cuenta con más de 2 millones de vistas mensuales, ilustrando su popularidad entre el público.