{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Práctica: extracción de datos de una tablas de fútbol\n",
    "\n",
    "En esta práctica utilizarás **BeautifulSoup** para extraer información de `tabla_futbol.html`. Después guardarás los datos obtenidos en 2 CSV y JSON."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1. Extraer las tablas del HTML"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "145a71d9",
   "metadata": {},
   "outputs": [],
   "source": [
    "import csv\n",
    "\n",
    "def crear_csv(caption, cabeceras, filas):\n",
    "\n",
    "    # Crear el nombre del archivo a partir del caption\n",
    "    nombre_archivo = caption.replace(\" \", \"_\") + \".csv\"\n",
    "\n",
    "    with open(nombre_archivo,\"w\", encoding=\"utf-8-sig\", newline=\"\") as fichero:\n",
    "\n",
    "        escritor = csv.DictWriter(fichero, fieldnames=cabeceras)\n",
    "\n",
    "        escritor.writeheader()\n",
    "        escritor.writerows(filas)\n",
    "\n",
    "    print(\"Se ha creado:\", nombre_archivo)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "6c0c81af",
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "\n",
    "def crear_json(datos_futbol):\n",
    "    with open(\"datos_futbol.json\", \"w\", encoding=\"utf-8\") as fichero:\n",
    "        json.dump(datos_futbol, fichero, ensure_ascii=False, indent=4)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "88db7719",
   "metadata": {},
   "outputs": [],
   "source": [
    "#Coger el contenido jhuegos.html\n",
    "from bs4 import BeautifulSoup\n",
    "with open(\"tabla_futbol.html\", \"r\", encoding=\"utf-8\") as file:\n",
    "    contenido = file.read()\n",
    "\n",
    "soup = BeautifulSoup(contenido, \"html.parser\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "20e886be",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Clasificación de la Liga\n",
      "Se ha creado: Clasificación_de_la_Liga.csv\n",
      "Estadísticas de Jugadores\n",
      "Se ha creado: Estadísticas_de_Jugadores.csv\n"
     ]
    }
   ],
   "source": [
    "#Extraer la tabla Clasificación de la liga\n",
    "\n",
    "# listas a crear:\n",
    "#   cabeceras de la tabla\n",
    "#   datos de cada fila\n",
    "# dicionario:\n",
    "#    datos_futbol = {\n",
    "#        \"tabla\": caption,\n",
    "#        cabeceras[0]: datos_fila[0],\n",
    "#        cabeceras[1]: datos_fila[1],\n",
    "#        cabeceras[2]: datos_fila[2],\n",
    "#        cabeceras[3]: datos_fila[3],\n",
    "#        cabeceras[4]: datos_fila[4],\n",
    "#        cabeceras[5]: datos_fila[5],\n",
    "#        cabeceras[6]: datos_fila[6]\n",
    "#    }\n",
    "\n",
    "tablas = soup.find_all(\"table\")\n",
    "\n",
    "todos_datos_futbol=[]\n",
    "\n",
    "for tabla in tablas:    \n",
    "    caption= tabla.find(\"caption\").get_text(strip=True)\n",
    "    print(caption)\n",
    "\n",
    "    # guardar datos de las cabeceras\n",
    "    cabeceras = []\n",
    "    for th in tabla.find_all(\"th\"):\n",
    "        cabeceras.append(th.get_text(strip=True)) #inserto en la lista  \n",
    " \n",
    "    #guardar datos de la tabla\n",
    "    datos_tabla = []\n",
    "    filas = tabla.find(\"tbody\").find_all(\"tr\")\n",
    "    for fila in filas:\n",
    "         # guardar datos de las filas\n",
    "        datos_fila = []\n",
    "        columnas= fila.find_all(\"td\")\n",
    "\n",
    "        # Extraer el texto de las columnas\n",
    "        for columna in columnas:            \n",
    "            dato = columna.get_text(strip=True)\n",
    "            datos_fila.append(dato)   #inserto en la lista      \n",
    "\n",
    "           \n",
    "        # Crear un diccionario para esta fila: cabecera y la fila\n",
    "        datos_futbol = {}\n",
    "        for posicion in range(len(cabeceras)):\n",
    "            datos_futbol[cabeceras[posicion]] = datos_fila[posicion]\n",
    "\n",
    "        datos_tabla.append(datos_futbol)\n",
    "        #todos_datos_futbol.append(datos_futbol)   \n",
    "        todos_datos_futbol.append({\n",
    "            \"nombre\": caption,\n",
    "            \"datos\": datos_tabla\n",
    "        })\n",
    "            \n",
    "    #llamo a la funcion para que me cree el csv de la tabla\n",
    "    crear_csv(caption, cabeceras, datos_tabla)\n",
    "\n",
    "\n",
    "#llamo a la funcion para que me cree un json\n",
    "crear_json(todos_datos_futbol)\n",
    "\n",
    "    \n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".venv (3.14.7.final.0)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.14.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
