Pirobits
  

Cómo procesar un Sitemap.xml con Python

alberto avatar Alberto Sola · 1/2/2024 · 2 min

En este post te explico cómo procesar un sitemap.xml con python, de forma que puedas realizar tareas sobre las URLs.

En mi caso, recientemente he hecho un cambio en una página web estática que contiene muchas URLs. Para garantizar que ninguna página da un código HTTP 404 y evitar que afecte al SEO de ésta, he realizado un pequeño script que:

  1. Se descarga el sitemap.xml de producción.
  2. Lo parsea y obtiene un listado de URLs.
  3. Para cada URL, sustituye el host por uno local.
  4. Lanza una request y comprueba que el servidor devuelva status=200.

¿Qué es un sitemap.xml?

Un sitemap.xml es un archivo utilizado en el ámbito del desarrollo web, concretamente en la optimización de los motores de búsqueda (SEO).

Su función principal es proporcionar un índice de todas las páginas importantes de un sitio web. Este archivo es especialmente útil para los motores de búsqueda, como Google, ya que les ayuda a entender la estructura de tu sitio web y a encontrar todas sus páginas de manera más eficiente.

Si utilizas un generador de estáticos como en mi caso, que utilizo GoHugo, el fichero sitemap.xml se genera automáticamente. Si por el contrario tu sitio es dinámico y lo gestionas tú, posiblemente tendrás que generar este fichero mediante una API.

Código del script

Para el desarrollo del script he elegido el lenguaje Python, y le he pedido a ChatGPT que me ayude. He tenido que realizar algunos ajustes manuales para que terminase de funcionar correctamente.

Te dejo el script a continuación. Recuerda que necesitarás instalar el paquete requests con pip para que funcione.

from urllib.parse import urlparse
import xml.etree.ElementTree as ET
import requests

def check_sitemap(sitemap_url, base_url):
    try:
        response = requests.get(sitemap_url)
        response.raise_for_status()

        root = ET.fromstring(response.content)

        namespace = {'ns': 'http://www.sitemaps.org/schemas/sitemap/0.9'}

        for url in root.findall('ns:url/ns:loc', namespace):
            full_url = url.text.strip()
            path = urlparse(full_url).path
            localhost_url = base_url + path
            response = requests.get(localhost_url)

            if response.status_code == 404:
                print(f"404 Not Found: {path}")

    except Exception as e:
        print(f"Error: {e}")

# URL to your sitemap file
sitemap_file = 'https://www.example.com/sitemap.xml'
# Base URL of your localhost server
localhost_url = 'http://localhost:1313'

check_sitemap(sitemap_file, localhost_url)

Si te ha resultado útil este artículo agradecería si te suscribes a mi newsletter. Recibirás contenido exclusivo de calidad y también me ayudarás enormemente. Cada suscripción apoya el trabajo que realizo y me permite conocer mejor los temas que te interesan, de forma que puedo mejorar los conocimientos que comparto contigo.


Posts recientes