Spaces:
Runtime error
Runtime error
File size: 6,509 Bytes
b92ae70 31c2313 b92ae70 31c2313 b92ae70 31c2313 b92ae70 31c2313 b92ae70 31c2313 b92ae70 d5964cb 31c2313 b92ae70 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
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) |