project_wind_energy_lobby / boe_crawler.py
cryptocalypse's picture
more fields
d49eff8
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_full.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)
#print(row)
output.write(str(row[0])+","+str(row[1])+","+str(row[2])+","+str(row[3])+","+str(row[4])+","+str(row[5])+","+str(row[6])+","+str(row[7])+","+str(row[8])+","+str(row[9])+","+str(row[10])+","+str(row[11])+","+str(row[12])+","+str(row[14])+","+nombre_empresa+"\n")
print(row)
# 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)