Documentación - Chavic12/ProyectoData GitHub Wiki

Documentación

# Importa las bibliotecas necesarias
En esta sección, se importan las bibliotecas necesarias para el proceso de extracción de datos y manipulación de archivos CSV.

from bs4 import BeautifulSoup
import requests
import os
import csv

Función para obtener los enlaces de carreras

Esta función parse_carrera_links toma una URL como entrada y utiliza BeautifulSoup para analizar el contenido HTML de la página. Luego, encuentra los elementos

con la clase 'grado' que contienen los enlaces de las carreras y los extrae en una lista.
def parse_carrera_links(url):
    # Realiza una solicitud HTTP para obtener la página
    response = requests.get(url)
    
    if response.status_code == 200:
        # Analiza el contenido HTML usando BeautifulSoup
        soup = BeautifulSoup(response.content, 'html.parser')
        
        # Encuentra los elementos div con la clase 'grado' para los enlaces de las carreras
        div_grado_elements = soup.find_all('div', class_='grado')
        carrera_links = [a['href'] for div in div_grado_elements for a in div.find_all('a')]
        
        return carrera_links
    else:
        print("No se pudo acceder a la página web.")
        return []

Función para extraer datos de una página de carrera y guardarlos en un archivo CSV

La función scrape_and_save_data recibe una URL y un objeto de escritura CSV. Realiza una solicitud HTTP para obtener el contenido de la página y luego utiliza BeautifulSoup para analizarlo. Luego, encuentra las secciones que contienen información sobre la universidad y extrae los datos relevantes, como el ciclo, el título, la duración, etc. Luego, crea una fila por cada materia y ciclo para cada modalidad y escribe los datos en el archivo CSV.

def scrape_and_save_data(url, writer):
    # Realiza una solicitud HTTP para obtener el contenido HTML
    response = requests.get(url)

    if response.status_code == 200:
        # Analiza el contenido HTML usando BeautifulSoup
        soup = BeautifulSoup(response.content, 'html.parser')
        
        # Encuentra las secciones con la clase 'wrapper-semestre' que contienen información de la universidad
        university_sections = soup.find_all('section', class_='wrapper-semestre')
        for section in university_sections:
            # Extrae el ciclo desde el div con la clase 'btn-semestre'
            ciclo = section.find('div', class_='btn-semestre').text.strip()
            
            # ... Resto de la extracción de datos ...

            # Crea una fila por cada materia y ciclo para cada modalidad
            for materia in materias:
                for modalidad in modalidades:
                    extracted_data = {
                        'carrera': carrera,
                        'ciclo': ciclo,
                        'materia': materia,
                        # ... Resto de los campos de datos ...
                    }
                    writer.writerow(extracted_data)
    else: 
        print("No se pudo acceder a la página web:", url)

Función principal

La función main es donde se inicia el proceso. Define la URL de inicio, obtiene los enlaces de carreras, establece el nombre del archivo CSV y verifica si el archivo ya existe. Luego, abre el archivo CSV y configura el escritor CSV. Llama a la función scrape_and_save_data para obtener datos desde una página de ejemplo y guardarlos en el archivo CSV.

def main():
    # URL de inicio
    start_url = 'https://www.utpl.edu.ec'
    
    # Obtiene los enlaces de carreras
    carrera_links = parse_carrera_links(start_url)
    
    # Nombre del archivo CSV
    csv_file = 'datos_universidades.csv'
    
    # Comprueba si el archivo ya existe
    file_exists = os.path.exists(csv_file)
    
    # Abre el archivo CSV para escritura
    with open(csv_file, 'a', newline='', encoding='utf-8') as file:
        # Define los campos para el encabezado
        fieldnames = ['carrera', 'ciclo', 'facultad', 'materia', 'universidad', 'modalidad', 'descripcion', 'titulo', 'duracion']
        
        # Crea un escritor CSV
        writer = csv.DictWriter(file, fieldnames=fieldnames, delimiter=';')
        
        # Si el archivo no existe, escribe el encabezado
        if not file_exists:
            writer.writeheader()
        
        # Llama a la función para obtener datos desde una página de ejemplo
        scrape_and_save_data('https://www.utpl.edu.ec/carreras/empresas', writer)

Ejecución de la Función Principal

Este bloque asegura que la función principal main se ejecute solo si el script se ejecuta directamente (no si se importa como módulo). Es una práctica común en Python para mantener el código modular y reutilizable.

if __name__ == "__main__":
    main()
⚠️ **GitHub.com Fallback** ⚠️