typestar

link_scraper.py en Python

Raspar los enlaces de una página, separando internos de externos.

"""Raspa una página en busca de enlaces y cuenta internos y externos."""
import sys
from urllib.parse import urljoin, urlparse

import requests
from bs4 import BeautifulSoup


def extraer_enlaces(url):
    respuesta = requests.get(url, timeout=10,
                            headers={"User-Agent": "typestar-bot/1.0"})
    respuesta.raise_for_status()
    sopa = BeautifulSoup(respuesta.text, "html.parser")
    host = urlparse(url).netloc
    internos, externos = [], []
    for ancla in sopa.select("a[href]"):
        completa = urljoin(url, ancla["href"])
        destino = internos if urlparse(completa).netloc == host else externos
        destino.append(completa)
    return internos, externos


def principal():
    url = sys.argv[1] if len(sys.argv) > 1 else "https://example.com"
    try:
        internos, externos = extraer_enlaces(url)
    except requests.RequestException as exc:
        print(f"no se pudo obtener {url}: {exc}")
        raise SystemExit(1)
    print(f"{url}")
    print(f"  enlaces internos: {len(internos)}")
    print(f"  enlaces externos: {len(externos)}")
    for enlace in externos[:5]:
        print(f"    -> {enlace}")


if __name__ == "__main__":
    principal()

Cómo funciona

  1. requests trae la página con un user agent.
  2. BeautifulSoup selecciona cada ancla con href.
  3. urljoin y urlparse clasifican cada enlace.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
38
Caracteres a escribir
1059
Tokens
256
Ritmo de tres estrellas
115 tpm

Al ritmo de tres estrellas de 115 tokens por minuto, este intento toma unos 134 segundos.

Escribe este fragmento

Paso 1 de 1 en Bis; paso 9 de 9 en Web scraping.

← Anterior