Saltar al contenido principal
Piloterr
Volver al blog
14 de octubre de 2024

Cómo Detectar el CMS de un Sitio Web Usando APIs: Guía Paso a Paso

Identificar el Sistema de Gestión de Contenidos (CMS) utilizado por un sitio web puede ofrecer información valiosa para empresas, desarrolladores y especialistas en marketing. En este artículo, exploraremos por qué es útil detectar la tecnología CMS de un sitio web y cómo recuperar esta información utilizando APIs.

Utiliza la API de Tecnología de Sitios Web o nuestras APIs de Scraping generales para la detección de tecnología.

¿Por qué identificar la tecnología CMS de un sitio web?

Comprender el CMS detrás de un sitio web es esencial por varias razones:

  • Análisis de Competidores: Saber qué CMS utilizan tus competidores puede proporcionar información sobre su pila tecnológica, escalabilidad y posibles vulnerabilidades.
  • Asociaciones Técnicas: Si estás buscando asociarte o integrarte con un sitio web, conocer el CMS ayuda a determinar la compatibilidad con tus herramientas o servicios.
  • Conciencia de Seguridad: Algunas plataformas CMS son más vulnerables a ciertos tipos de ataques que otras. Identificar un CMS te permite evaluar posibles riesgos de seguridad.
  • Potencial de Personalización: Diferentes CMS tienen distintos grados de flexibilidad. Reconocer el CMS ayuda a determinar qué tan fácil sería personalizar o mejorar ciertas características en un sitio web.

En resumen, identificar el CMS de un sitio web puede proporcionar valiosos conocimientos técnicos y estratégicos.

¿Cómo recuperar información del CMS?

Regístrate en un servicio de API

Varias plataformas ofrecen APIs que detectan tecnologías CMS, como Piloterr, BuiltWith y WhatCMS. Para este ejemplo, utilizaremos la API de Piloterr.

  1. Crea tu cuenta: Ve al panel de Piloterr e regístrate para una cuenta gratuita o de pago, según tus necesidades.
  2. Obtén tu clave API: Después del registro, recibirás una clave API.
  3. Configura tu entorno: Instala las librerías necesarias
Bash
pip install requests

Código básico en Python

No olvides reemplazar PILOTERR_API_KEY con tu clave API real. El script asume que las respuestas de la API de Piloterr están en un formato específico de nuestra API, por lo que puede necesitar ajustes dependiendo del proveedor que elijas.

  • Copia el código
  • Crea un nuevo archivo detect_cms.py
  • Reemplaza el token de la API con el tuyo
  • Reemplaza la variable websites según tus necesidades
  • Ejecuta el script con python detect_cms.py
Python
import requests
import json

PILOTERR_API_KEY = '' #YOUR-API-KEY-HERE

# Piloterr API URL
url = "https://piloterr.com/api/v2/website/technology"

# Lista de sitios web a verificar
websites = [
    "https://www.piloterr.com",
    "https://www.carreblanc.com",
    "https://www.bobbies.com",
    "https://www.leslipfrancais.fr"
]

# Lista de CMS basada en categorías de Wappalyzer
cms_list = [
    "1c-bitrix", "3dcartstores", "abicart", "ametys", "amiro.cms",
    "apostrophecms", "arc publishing",
    "asciidoc", "atg", "bigcommerce", "blogger", "bludit",
    "borderfree", "bridgeline idev",
    "broadvision", "ckan", "cms made simple", "cmSimple",
    "concrete5", "contao", "contenido",
    "contensis", "contentful", "craft cms", "cryoblock",
    "danneo cms", "datocms", "day.js",
    "dede", "diazo", "dnn", "dokuwiki", "dotcms", "drupal",
    "dynamicweb", "e107", "easydb",
    "easyengine", "ez publish", "expressionengine",
    "fandom", "flash", "flatpress", "flexcmp",
    "fluxbb", "forestry", "fork cms", "foswiki", "frog cms",
    "gatsby", "getsimple cms", "ghost",
    "gitbook", "grav", "gridsome", "groovy", "halo", "hippo", "hubspot", 
    "hugo", "hybris", "ibm websphere commerce",
    "ikiwiki", "imperia cms", "indexhibit", "instapage",
    "intercom articles", "joomla", "kentico cms",
    "koken", "komodo cms", "liferay", "lightspeed ecommerce",
    "lima", "locomotive cms", "magento",
    "mambo", "markdownguide", "matomo", "mediawiki", "miva",
    "modx", "moodle", "movable type",
    "mybb", "neos", "netcat", "netlifycms", "nopcommerce",
    "odoo", "opencart", "orchard cms",
    "oscommerce", "percussion", "phpbb", "phpmyadmin", "pimcore",
    "plone", "posterous", "prestashop",
    "pyrocms", "rbs change", "rcms", "roadiz cms",
    "rs-site", "saleor", "salesforce commerce cloud",
    "serendipity", "shopify", "shopware", "silverstripe", "sitecore",
    "sitefinity", "sitemap generator",
    "siteor", "smelting", "solodev", "squarespace", "statamic",
    "storyblok", "strikingly", "subrion",
    "textpattern", "tilda", "trac", "typo3 cms", "typo3 neos",
    "umbraco", "umiсms", "vbulletin",
    "viennacms", "virto commerce", "visual composer", "voog",
    "wap review", "webflow", "webgui",
    "weebly", "wix", "woocommerce", "wordpress", "xenforo",
    "xt:commerce", "yii", "zencart", "zendesk",
    "zephir", "zeta producer"
]

# Función para encontrar el CMS
def find_cms(technologies):
    for tech in technologies:
        tech_name = tech.lower()
        for cms in cms_list:
            if cms in tech_name:
                return tech
    return "No se encontró CMS"

# Función para obtener tecnologías y CMS de un sitio web
def get_technologies_and_cms(site):
    params = {"query": site}
    headers = {"x-api-key": YOUR_API_KEY}
    response = requests.get(url, params=params, headers=headers)
    
    if response.status_code == 200:
        data = response.json()
        technologies = [tech["name"] for tech in data.get("technologies", [])]
        cms = find_cms(technologies)
        return {"cms": cms, "technologies": technologies}
    else:
        return {"technologies": [], "cms": "Error al recuperar datos"}

# Crear un diccionario para almacenar resultados
results = {}

# Obtener tecnologías y CMS para cada sitio web
for site in websites:
    site_data = get_technologies_and_cms(site)
    results[site] = site_data

# Convertir resultados a JSON
json_results = json.dumps(results, indent=2)

# Imprimir resultados en JSON
print(json_results)

# Opcionalmente, guardar JSON en un archivo
with open("website_technologies_and_cms.json", "w") as f:
    f.write(json_results)

Resultados

Después de la ejecución, obtenemos una tabla con el nombre de la empresa, el número de inversores y la fecha de fundación como la siguiente:

JSON
{
  "https://www.piloterr.com": {
    "cms": "Webflow",
    "technologies": [
      "Webflow",
      "jsDelivr",
      "Google Tag Manager",
      "Google Hosted Libraries",
      "Customer.io",
      "reCAPTCHA",
      "jQuery",
      "HubSpot Chat",
      "HubSpot",
      "Google Analytics",
      "core-js",
      "Google Font API",
      "HSTS",
      "Cloudflare",
      "Open Graph",
      "HTTP/3"
    ]
  },
  "https://www.carreblanc.com": {
    "cms": "Magento",
    "technologies": [
      "Magento",
      "Cart Functionality",
      "Sentry",
      "Algolia",
      "MySQL",
      "PHP",
      "Leaflet",
      "Hyva Themes",
      "Tailwind CSS",
      "Vue.js",
      "Alpine.js",
      "Zendesk",
      "reCAPTCHA",
      "Google Tag Manager",
      "Glider.js",
      "Didomi",
      "Splide",
      "Livefyre",
      "core-js",
      "WhatsApp Business Chat",
      "Preact",
      "Google Font API",
      "Font Awesome",
      "Avis Verifies",
      "Cloudflare",
      "Webpack",
      "Open Graph",
      "Module Federation",
      "HTTP/3"
    ]
  },
  "https://www.bobbies.com": {
    "cms": "PrestaShop",
    "technologies": [
      "PrestaShop",
      "Prismic",
      "Doofinder",
      "MySQL",
      "PHP",
      "PayPal",
      "Google Tag Manager",
      "Cloudflare Bot Management",
      "TikTok Pixel",
      "LazySizes",
      "jQuery Migrate",
      "jQuery",
      "Hotjar",
      "Google Analytics",
      "Facebook Pixel",
      "core-js",
      "reCAPTCHA",
      "MailChimp",
      "HSTS",
      "Cloudflare",
      "Open Graph",
      "HTTP/3"
    ]
  },
  "https://www.leslipfrancais.fr": {
    "cms": "Storyblok",
    "technologies": [
      "Storyblok",
      "Cart Functionality",
      "Shopify",
      "Doofinder",
      "Global-e",
      "Secomapp",
      "PayPal",
      "Apple Pay",
      "OneTrust",
      "Google Tag Manager",
      "Glider.js",
      "AB Tasty",
      "New Relic",
      "LazySizes",
      "Klaviyo",
      "core-js",
      "Boomerang",
      "Swiper",
      "Priority Hints",
      "Google Font API",
      "Avis Verifies",
      "Linkedin Insight Tag",
      "HSTS",
      "Cloudflare",
      "Webpack",
      "Open Graph",
      "Module Federation",
      "HTTP/3"
    ]
  }
}

Más para leer

Guías y noticias sobre web scraping, proxies y extracción de datos.

Web Scraping

Migración desde NetNut: qué hacer tras el cierre de la red

Google tomó medidas contra la red de proxies NetNut/Popa junto al FBI y Lumen. Cómo replantear tu stack de scraping sin gestionar proxies por tu cuenta.

Josselin Liebe
Josselin Liebe
Leer
Web Scraping

€17.99 en Francia, €29.99 en Alemania: monitoreo de precios por país

Misma referencia en el ERP, diferentes precios por país: promociones, monedas y surtido varían de una tienda a otra. Modelo de datos, ejemplos de API y un script en Python para un monitoreo de precios confiable.

Josselin Liebe
Josselin Liebe
Leer
Web Scraping

Mejor Scraper para Leboncoin 2026

Piloterr vs Apify vs lobstr.io para scraping en Leboncoin en 2026. Precios, endpoints y datos de productos verificados de fuentes oficiales el 29 de junio de 2026 — incluyendo la brecha legal entre el scraping público y el autenticado.

Josselin Liebe
Josselin Liebe
Leer

¿Listo para empezar?

Tu API de web scraping está a un clic. Comienza con +500 créditos, sin infraestructura que configurar, sin proxies que gestionar y sin necesidad de tarjeta de crédito.

  • +500 créditos
  • Sin tarjeta de crédito
  • Todos los endpoints incluidos