-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscraper.py
65 lines (59 loc) · 2.67 KB
/
scraper.py
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
import requests
from bs4 import BeautifulSoup
from datetime import datetime
# Diccionario para mapear los meses en español a inglés
meses = {
'Enero': 'January',
'Febrero': 'February',
'Marzo': 'March',
'Abril': 'April',
'Mayo': 'May',
'Junio': 'June',
'Julio': 'July',
'Agosto': 'August',
'Septiembre': 'September',
'Octubre': 'October',
'Noviembre': 'November',
'Diciembre': 'December'
}
def obtener_fecha_publicacion(soup):
"""Función para obtener la fecha de publicación"""
fecha_texto = soup.find('div', class_='margin-bottom-20 fecha-ultima-edicion').find_all('h6')[1].text.strip()
for mes_es, mes_en in meses.items():
fecha_texto = fecha_texto.replace(mes_es, mes_en)
return datetime.strptime(fecha_texto, '%d de %B de %Y').strftime('%d/%m/%Y')
def obtener_detalles_aviso(url_detalle):
"""Función para obtener detalles de un aviso"""
try:
response_detalle = session.get(url_detalle)
response_detalle.raise_for_status()
soup_detalle = BeautifulSoup(response_detalle.text, 'html.parser')
titulo = soup_detalle.find(id='tituloDetalleAviso').text.strip()
texto = soup_detalle.find(id='cuerpoDetalleAviso').text.strip()
return {'Título': titulo, 'Texto': texto, 'Enlace': url_detalle}
except Exception as e:
print(f"Error al obtener detalles del aviso: {e}")
return None
url_base = 'https://www.boletinoficial.gob.ar'
url_seccion = f'{url_base}/seccion/primera'
with requests.Session() as session:
try:
response = session.get(url_seccion)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser')
fecha_publicacion = obtener_fecha_publicacion(soup)
nombre_archivo = f'{str(fecha_publicacion).replace("/", "-")}.txt'
with open("./documents/" + nombre_archivo, 'w', encoding='utf-8') as archivo:
avisos = soup.find_all('div', class_='col-md-12 avisosSeccionDiv')
for aviso in avisos:
enlaces = [a['href'] for a in aviso.find_all('a', href=True)]
for enlace in enlaces:
url_detalle = f'{url_base}{enlace}'
detalle_aviso = obtener_detalles_aviso(url_detalle)
if detalle_aviso:
archivo.write(f"Fecha de Publicación: {fecha_publicacion}\n")
archivo.write(f"Título: {detalle_aviso['Título']}\n")
archivo.write(f"Texto: {detalle_aviso['Texto']}\n")
archivo.write(f"Enlace: {detalle_aviso['Enlace']}\n\n")
except Exception as e:
print(f"Error al obtener datos de la sección: {e}")