Spaces:
Runtime error
Runtime error
import requests | |
from bs4 import BeautifulSoup | |
from transformers import pipeline | |
import pandas as pd | |
from datetime import datetime, timedelta | |
# Configuraci贸n inicial | |
SITIOS = { | |
"Mundo Gremial": "https://www.mundogremial.com.ar", | |
"ANRed": "https://www.anred.org", | |
"Prensa Obrera": "https://www.prensaobrera.com", | |
"La Izquierda Diario": "https://www.laizquierdadiario.com" | |
} | |
# Fecha actual y l铆mite para noticias recientes (煤ltimos 7 d铆as) | |
FECHA_ACTUAL = datetime(2025, 1, 28) # Hoy es 28 de enero de 2025 | |
LIMITE_RECIENTE = FECHA_ACTUAL - timedelta(days=7) | |
# Cargar modelo de IA para an谩lisis de texto | |
try: | |
analizador = pipeline("text-classification", model="deepseek-ai/r1-zero") | |
except OSError as e: | |
print(f"Error al cargar el modelo: {e}") | |
# Fallback to a default model if the specified one fails | |
analizador = pipeline("text-classification", model="distilbert-base-uncased-finetuned-sst-2-english") # Example fallback model | |
# Cargar modelo de IA para generaci贸n de texto | |
modelo_generacion = pipeline("text-generation", model="deepseek-ai/DeepSeek-R1", trust_remote_code=True) | |
# Funci贸n para hacer scraping en un sitio | |
def scrapear_sitio(url): | |
try: | |
response = requests.get(url) | |
response.raise_for_status() | |
soup = BeautifulSoup(response.text, "html.parser") | |
return soup | |
except Exception as e: | |
print(f"Error al scrapear {url}: {e}") | |
return None | |
# Funci贸n para extraer noticias de Mundo Gremial | |
def extraer_mundo_gremial(soup): | |
noticias = [] | |
for articulo in soup.find_all("article", class_="post"): | |
titulo = articulo.find("h2").text.strip() | |
enlace = articulo.find("a")["href"] | |
contenido = articulo.find("div", class_="entry-content").text.strip() | |
fecha_texto = articulo.find("time")["datetime"] # Extraer fecha | |
fecha = datetime.strptime(fecha_texto, "%Y-%m-%d") # Convertir a objeto datetime | |
noticias.append({"titulo": titulo, "contenido": contenido, "enlace": enlace, "fecha": fecha}) | |
return noticias | |
# Funci贸n para extraer noticias de ANRed | |
def extraer_anred(soup): | |
noticias = [] | |
for articulo in soup.find_all("article"): | |
titulo = articulo.find("h2").text.strip() | |
enlace = articulo.find("a")["href"] | |
contenido = articulo.find("div", class_="entry-content").text.strip() | |
fecha_texto = articulo.find("time")["datetime"] # Extraer fecha | |
fecha = datetime.strptime(fecha_texto, "%Y-%m-%d") # Convertir a objeto datetime | |
noticias.append({"titulo": titulo, "contenido": contenido, "enlace": enlace, "fecha": fecha}) | |
return noticias | |
# Funci贸n para extraer noticias de Prensa Obrera | |
def extraer_prensa_obrera(soup): | |
noticias = [] | |
for articulo in soup.find_all("article"): | |
titulo = articulo.find("h2").text.strip() | |
enlace = articulo.find("a")["href"] | |
contenido = articulo.find("div", class_="entry-content").text.strip() | |
fecha_texto = articulo.find("time")["datetime"] # Extraer fecha | |
fecha = datetime.strptime(fecha_texto, "%Y-%m-%d") # Convertir a objeto datetime | |
noticias.append({"titulo": titulo, "contenido": contenido, "enlace": enlace, "fecha": fecha}) | |
return noticias | |
# Funci贸n para extraer noticias de La Izquierda Diario | |
def extraer_la_izquierda_diario(soup): | |
noticias = [] | |
for articulo in soup.find_all("article"): | |
titulo = articulo.find("h2").text.strip() | |
enlace = articulo.find("a")["href"] | |
contenido = articulo.find("div", class_="entry-content").text.strip() | |
fecha_texto = articulo.find("time")["datetime"] # Extraer fecha | |
fecha = datetime.strptime(fecha_texto, "%Y-%m-%d") # Convertir a objeto datetime | |
noticias.append({"titulo": titulo, "contenido": contenido, "enlace": enlace, "fecha": fecha}) | |
return noticias | |
# Funci贸n para clasificar noticias | |
def clasificar_noticia(texto): | |
try: | |
resultado = analizador(texto) | |
return resultado[0]["label"] | |
except Exception as e: | |
print(f"Error al clasificar texto: {e}") | |
return "Desconocido" | |
# Funci贸n para detectar conflictos laborales | |
def es_conflicto_laboral(texto): | |
palabras_clave = ["huelga", "paro", "despido", "salario", "protesta", "trabajadores", "sindicato"] | |
return any(palabra in texto.lower() for palabra in palabras_clave) | |
# Funci贸n para detectar protestas pr贸ximas | |
def es_protesta_proxima(texto): | |
palabras_clave = ["marcha", "manifestaci贸n", "concentraci贸n", "asamblea", "corte", "huelga"] | |
return any(palabra in texto.lower() for palabra in palabras_clave) | |
# Procesar todos los sitios | |
conflictos_laborales = [] | |
agenda_protestas = [] | |
for nombre, url in SITIOS.items(): | |
print(f"Scrapeando {nombre}...") | |
soup = scrapear_sitio(url) | |
if soup: | |
if nombre == "Mundo Gremial": | |
noticias = extraer_mundo_gremial(soup) | |
elif nombre == "ANRed": | |
noticias = extraer_anred(soup) | |
elif nombre == "Prensa Obrera": | |
noticias = extraer_prensa_obrera(soup) | |
elif nombre == "La Izquierda Diario": | |
noticias = extraer_la_izquierda_diario(soup) | |
for noticia in noticias: | |
# Filtrar noticias recientes (煤ltimos 7 d铆as) | |
if noticia["fecha"] >= LIMITE_RECIENTE: | |
if es_conflicto_laboral(noticia["contenido"]): | |
conflictos_laborales.append({ | |
"Sitio": nombre, | |
"T铆tulo": noticia["titulo"], | |
"Enlace": noticia["enlace"], | |
"Fecha": noticia["fecha"].strftime("%Y-%m-%d") | |
}) | |
if es_protesta_proxima(noticia["contenido"]): | |
agenda_protestas.append({ | |
"Sitio": nombre, | |
"T铆tulo": noticia["titulo"], | |
"Enlace": noticia["enlace"], | |
"Fecha": noticia["fecha"].strftime("%Y-%m-%d") | |
}) | |
# Crear tablas con Pandas | |
df_conflictos = pd.DataFrame(conflictos_laborales) | |
df_protestas = pd.DataFrame(agenda_protestas) | |
# Guardar tablas en archivos CSV | |
df_conflictos.to_csv("conflictos_laborales.csv", index=False) | |
df_protestas.to_csv("agenda_protestas.csv", index=False) | |
print("Tablas generadas:") | |
print("\nConflictos Laborales en Desarrollo (煤ltimos 7 d铆as):") | |
print(df_conflictos) | |
print("\nAgenda de Protestas Pr贸ximas (煤ltimos 7 d铆as):") | |
print(df_protestas) |