Saltar a contenido

Spider Links Checker

El servicio Spider Links Checker está desarrollado en Python, en formato API, con el objetivo de poder analizar los enlaces que hay en una página web para ver si funcionan correctamente.

La forma más sencilla de desplegarlo es usando Docker, aunque también puede hacerse directamente en cualquier servidor que disponga de Python instalado.

Despliegue

Para desplegar el proyecto bastará con descargar el proyecto (solicitar acceso al equipo de SogetiLabs mediante la plataforma de contacto) y seguir los siguientes pasos:

pip install -r requirements.txt
flask run
docker build . -t spider-links-checker
docker run -dit -p 5000:5000 spider-links-checker

Una vez tenemos la API desplegada, podemos hacer las peticiones de forma facil a través de Postman.

Uso básico

El endpoint para el análisis es [POST] /api/v1/scrap, y requiere de una serie de parámetros para su uso, que deben ser pasados como "form-data":

Parámetro Obligatorio Descripción
base_domains Lista de URL base que se quieren analizar, separadas por comas (,) y sin espacios. Ej: https://sogeti.es,https://capgemini.com
accepted_domains No Lista de dominios, separados por comas (,), sin espacios ni protocolo. Ej: sogeti.com,sogeti.fr. Útil por si la web contiene otros dominios que se quieran tener en cuenta además del dominio base
forbidden_domains No Lista de dominios, separados por comas (,), sin espacios ni protocolo. Ej: facebook.com,instagram.com. Útil por si se quieren obviar enlaces externos, como facebook o twitter
depth No Límite de profundidad que se quiere analizar, siendo 0 la página principal únicamente. Si no se indica ninguna profundidad se analizará la web completa
forbidden_ext No Lista de extensiones que no se quieren analizar, separadas por comas (,) y sin espacios. Ej: css,aspx,js,mp4 Útil para obviar determinados tipos de ficheros.
cookies_file* No Ficheros de cookies en caso de que la web lo requiera. El nombre de cada fichero debe ser cookies-<nombredeldominio>.txt. Ej: cookies-sogeti.txt

* Este parámetro está en una fase muy inicial, por lo que puede no funcionar correctamente.

El resultado de la ejecución será un JSON, que se guardará en la raíz del proyecto con el nombre de results.json, con la siguiente estructura:

{
    "execution_time": 665, //(9)!
    "total_links_fail": 34, //(10)!
    "total_links_pass": 355, //(11)!
    "total_analyzed": 389, //(12)!
    "total_cant_scan": 0, //(1)!
    "data": [ //(2)!
        {
            "base_url": "http://sogeti.es", //(13)!
            "links": 9, //(15)!
            "links_fail": 4, //(16)!
            "links_pass": 5, //(17)!
            "cant_scan": 0, //(18)!
            "results": [ //(14)!
                {
                    "element": "https://sogeti.es", //(3)!
                    "link": "https://sogeti.es", //(4)!
                    "parent": "https://sogeti.es", //(5)!
                    "non_https": 0, //(20)!
                    "redirect": 1, //(21)!
                    "redirections": [ //(22)!
                        "https://www.sogeti.es/"
                    ],
                    "status_code": 200, //(6)!
                    "status_message": "OK" //(7)!
                },
                {
                    "element": "/ofrecemos/sogetilabs/",
                    "link": "https://sogeti.es/ofrecemos/sogetilabs/",
                    "parent": "https://www.sogeti.es/sobre-sogeti/quienes-somos/",
                    "non_https": 0,
                    "redirect": 0,
                    "redirections": [],
                    "status_code": 404,
                    "status_message": "Not Found"
                },
                {
                    "element": "/soluciones/transformacion-digital/dynamics365/",
                    "link": "https://sogeti.es/soluciones/transformacion-digital/dynamics365/",
                    "parent": "https://www.sogeti.es/sobre-sogeti/quienes-somos/",
                    "non_https": 0,
                    "redirect": 0,
                    "redirections": [],
                    "status_code": 404,
                    "status_message": "Not Found"
                },
                ... //(8)!
            ]
        },
        {
            ... //(19)!
        }
    ]
}
  1. Número total de enlaces que no han podido ser analizados
  2. Array con la lista de resultados. 1 objeto por url base
  3. Contenido del "href" del elemento que no funciona
  4. Enlace completo que no funciona
  5. url donde se ha encontrado dicho elemento
  6. Código de respuesta del servidor
  7. Mensaje de respuesta del servidor
  8. Más elementos
  9. Tiempo total de escaneo (en segundos)
  10. Número total de enlaces fallados (status diferente de 200)
  11. Número total de enlaces correctos (status 200)
  12. Total de enlaces analizados (pasados + fallados)
  13. URL base analizada
  14. Lista de enlaces analizados de la URL base anterior
  15. Enlaces de la URL base analizados
  16. Enlaces de la URL base fallados
  17. Enlaces de la URL base pasados
  18. Enlaces de la URL base no analizados
  19. Siguiente elemento con otra URL analizada
  20. Indica si la página NO tiene https
  21. Indica si la página ha sido redirigida a otro sitio
  22. Lista de urls a las cuáles ha sido redirigido el link

Este fichero podrá ser procesado como mejor convenga, ya sea con PowerBI u otra herramienta de visualización de datos.

En caso de querer usar PowerBI, se puede usar esta plantilla