0% encontró este documento útil (0 votos)
13 vistas6 páginas

REGEX

Analisis

Cargado por

ssmarintbr
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
13 vistas6 páginas

REGEX

Analisis

Cargado por

ssmarintbr
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Actividad Análisis con regex

Asignatura Ciencia de datos 701


Docente Andres Miranda
estudiante George Rubio

1. ARCHIVO LOG:

2. PATRONES DE REYEX:

3. Adicional:
4. Errores:
5. Solicitudes por ruta:

6. Código:

import re

import json

from collections import Counter

# Expresión regular para capturar los elementos del log

pattern = (

r'(?P<ip>\d+\.\d+\.\d+\.\d+) - - \[(?P<fecha>[^\]]+)\] '

r'"(?P<metodo>GET|POST|PUT|DELETE|HEAD|OPTIONS|CONNECT) (?P<ruta>[^ ]+) '

r'HTTP/\d\.\d" (?P<codigo>\d+) (?P<tamano>\d+|-) "(?P<referer>[^"]*)" '

r'"(?P<dispositivo>[^"]*)"'
)

# Función para extraer datos del log

def extraer_datos_log(ruta_log):

logs = []

with open(ruta_log, 'r') as f:

for line in f:

match = [Link](pattern, line)

if match:

[Link]([Link]())

return logs

# Función para guardar datos en un archivo JSON

def guardar_en_json(datos, archivo):

with open(archivo, 'w') as f:

[Link](datos, f, indent=4)

print(f"Datos guardados en '{archivo}'")

# Función para contar solicitudes por IP

def contar_solicitudes_por_ip(logs):

ip_counter = Counter(log['ip'] for log in logs)

guardar_en_json(ip_counter, '[Link]')

return ip_counter

# Función para filtrar solicitudes con errores (códigos 4xx y 5xx)

def filtrar_errores(logs):
errores = [log for log in logs if log['codigo'].startswith(('4', '5'))]

guardar_en_json(errores, '[Link]')

return errores

# Función para contar solicitudes por recurso (ruta)

def contar_solicitudes_por_ruta(logs):

ruta_counter = Counter(log['ruta'] for log in logs)

guardar_en_json(ruta_counter, '[Link]')

return ruta_counter

# Ruta del archivo de log

ruta_log = 'C:\\Users\\saram\\Downloads\\apache_logs.txt'

# Extracción y análisis de los datos del log

logs = extraer_datos_log(ruta_log)

guardar_en_json(logs, '[Link]')

# Realización de análisis

ip_counter = contar_solicitudes_por_ip(logs)

errores = filtrar_errores(logs)

ruta_counter = contar_solicitudes_por_ruta(logs)

# Imprimir resultados en consola para referencia

print("Cantidad de solicitudes por IP:")

for ip, count in ip_counter.items():

print(f"{ip}: {count}")
print("\nSolicitudes con códigos de estado 4xx y 5xx:")

for error in errores:

print(error)

print("\nCantidad de solicitudes por recurso:")

for ruta, count in ruta_counter.items():

print(f"{ruta}: {count}")

También podría gustarte