import pandas as pd import requests import re import pdfplumber from io import BytesIO # Lee el archivo CSV df = pd.read_csv('proyectos.csv') # Lista para almacenar los resultados resultados = [] # Función para extraer texto de un PDF def extraer_texto_pdf(url): try: response = requests.get(url) pdf_file = BytesIO(response.content) with pdfplumber.open(pdf_file) as pdf: texto = '' for pagina in pdf.pages: texto += pagina.extract_text() return texto except Exception as e: print(f"Error al extraer texto del PDF: {e}") return None output = open("proyectos_empresas.csv","a") # Itera sobre las filas del DataFrame for index, row in df.iterrows(): nombre_proyecto = row[0] promotor = row[2] url_boe = row[-1] # Última columna para la URL del BOE try: print(f"Procesando: {url_boe}") # Verifica si la URL es de un PDF if url_boe.endswith('.pdf'): content = extraer_texto_pdf(url_boe) else: response = requests.get(url_boe) content = response.text # Si no se pudo extraer contenido, continúa con la siguiente iteración if not content: resultados.append([nombre_proyecto, url_boe, "Error al acceder o extraer contenido"]) continue # Expresión regular para encontrar el nombre de la empresa entre "público" y "MW" #match = re.search(r'otorga a\s*(.*?)\s*SL\.', content, re.IGNORECASE | re.DOTALL) match = re.search(r'otorga a\s*(.*?)\s*SL|SA', content, re.IGNORECASE | re.DOTALL) if match: nombre_empresa = match.group(1).strip() else: nombre_empresa = "No encontrado" if(len(nombre_empresa)<100): print("Proyecto: "+nombre_proyecto+", Promotor: "+promotor+", Fiscal: "+nombre_empresa) output.write(nombre_proyecto+" , "+promotor+" , "+nombre_empresa+"\n") # Añade el resultado a la lista resultados.append([nombre_proyecto, url_boe, nombre_empresa]) except Exception as e: print(f"Error procesando la URL: {url_boe} - {e}") resultados.append([nombre_proyecto, url_boe, "Error al acceder a la URL"]) # Imprime los resultados for resultado in resultados: print(resultado)