Verificar estado web con Python

Vamos a ver cómo podemos ver si una web sigue online, o da error. Vemos un ejemplo de cómo verificar el estado de una web con Python.

Python tutorial

Vaya por delante que el código está creado para Linux. Desconozco si hay una posibilidad de hacerlo para Windows.

Objetivo

Vamos a visitar una url con la orden de comando «wget», y analizaremos el estado que nos devuelve. Si es 0, es que todo ha ido correcto. En caso contrario, ha habido algun error.

import subprocess

def verificar_estado_web_wget(url):
    try:
        # Ejecuta wget para consultar web
        result = subprocess.run(["wget", url])

        # Verifica el código de salida de wget
        if result.returncode == 0:
            print(f"La página {url} se ha descargado con éxito.")
        else:
            print(f"Se ha producido un error al descargar la página {url}.")
    except Exception as e:
        print(f"Se ha producido un error: {str(e)}")

# Ejemplo de uso
url_pagina = "https://www.google.com"
verificar_estat_web_wget(url_pagina)

En este ejemplo, podemos analizar una sola página. En el siguiente, veremos un ejemplo para analizar varias páginas.

Múltiples webs

Vamos a hacer lo mismo, pero ahora para más de una web. Almacenamos el enlace web y el servidor en la que está alojada. De esta manera, comprobará el estado de cada web, y en el caso que alguna de error, sabremos en qué servidor está alojada.

import subprocess
import numpy as np
import time

def verificar_estado_web_multiple(urls):
    for fila in range(len(urls)):
        try:
            # Descanso 1 segundo para no atacar al servidor
            time.sleep(1)

            # Llamamos a wget de Linux pasándolo -q y --spider para que no descargue nada
            result = subprocess.run(["wget","-q","--spider", urls[fila][0]])

            # Comprueba el estado (OK o ERROR)
            if result.returncode == 0:
                print(f"OK _ {urls[fila][0]} - {urls[fila][1]}")
            else:
                print(f"ERROR _ {result.returncode} _ {urls[fila][0]} - {urls[fila][1]}")
        except Exception as e:
            print(f"ERROR: {str(e)}")

# Ejemplo listado de webs con sus servidores
lista_urls = np.array([
    ["https://www.google.com", "Servidor Debian"],
    ["https://blog.trescomatres.com", "Servidor Debian"],
])

verificar_estado_web_multiple(lista_urls)

Pero atentos, porque este código funciona cuando la web devuelve algun error (404, 403…). Si el servidor no responde o no se resuelve el dominio, entonces veréis que se queda pensando y no muestra los mensajes que debe mostrar. Cosa que nos indica que algo no funciona…

Es un pequeño inicio como ejemplo para verificar el estado de una web con Python, pero que lógicamente se puede perfeccionar para que muestre que error devuelve, en caso de haberlo.

Más información