cryptocalypse commited on
Commit
fed6bb4
verified
1 Parent(s): f1165ac

Create boe_crawler.py

Browse files
Files changed (1) hide show
  1. boe_crawler.py +78 -0
boe_crawler.py ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import pandas as pd
2
+ import requests
3
+ import re
4
+ import pdfplumber
5
+ from io import BytesIO
6
+
7
+ # Lee el archivo CSV
8
+ df = pd.read_csv('proyectos.csv')
9
+
10
+ # Lista para almacenar los resultados
11
+ resultados = []
12
+
13
+ # Funci贸n para extraer texto de un PDF
14
+ def extraer_texto_pdf(url):
15
+ try:
16
+ response = requests.get(url)
17
+ pdf_file = BytesIO(response.content)
18
+
19
+ with pdfplumber.open(pdf_file) as pdf:
20
+ texto = ''
21
+ for pagina in pdf.pages:
22
+ texto += pagina.extract_text()
23
+
24
+ return texto
25
+ except Exception as e:
26
+ print(f"Error al extraer texto del PDF: {e}")
27
+ return None
28
+
29
+
30
+ output = open("proyectos_empresas.csv","a")
31
+
32
+ # Itera sobre las filas del DataFrame
33
+ for index, row in df.iterrows():
34
+ nombre_proyecto = row[0]
35
+ promotor = row[2]
36
+ url_boe = row[-1] # 脷ltima columna para la URL del BOE
37
+
38
+ try:
39
+ print(f"Procesando: {url_boe}")
40
+
41
+ # Verifica si la URL es de un PDF
42
+ if url_boe.endswith('.pdf'):
43
+ content = extraer_texto_pdf(url_boe)
44
+ else:
45
+ response = requests.get(url_boe)
46
+ content = response.text
47
+
48
+ # Si no se pudo extraer contenido, contin煤a con la siguiente iteraci贸n
49
+ if not content:
50
+ resultados.append([nombre_proyecto, url_boe, "Error al acceder o extraer contenido"])
51
+ continue
52
+
53
+ # Expresi贸n regular para encontrar el nombre de la empresa entre "p煤blico" y "MW"
54
+ #match = re.search(r'otorga a\s*(.*?)\s*SL\.', content, re.IGNORECASE | re.DOTALL)
55
+ match = re.search(r'otorga a\s*(.*?)\s*SL|SA', content, re.IGNORECASE | re.DOTALL)
56
+
57
+ if match:
58
+
59
+ nombre_empresa = match.group(1).strip()
60
+
61
+ else:
62
+ nombre_empresa = "No encontrado"
63
+
64
+ if(len(nombre_empresa)<100):
65
+ print("Proyecto: "+nombre_proyecto+", Promotor: "+promotor+", Fiscal: "+nombre_empresa)
66
+ output.write(nombre_proyecto+" , "+promotor+" , "+nombre_empresa+"\n")
67
+
68
+ # A帽ade el resultado a la lista
69
+ resultados.append([nombre_proyecto, url_boe, nombre_empresa])
70
+
71
+ except Exception as e:
72
+ print(f"Error procesando la URL: {url_boe} - {e}")
73
+ resultados.append([nombre_proyecto, url_boe, "Error al acceder a la URL"])
74
+
75
+ # Imprime los resultados
76
+ for resultado in resultados:
77
+ print(resultado)
78
+