Skip to main content

Una sola API para scrapear cualquier sitio: HTML estatico, JS dinamico, APIs, login con sesion, crawling y Markdown para LLMs.

Project description

Proyecto de práctica: Web Scraping

5 técnicas de scraping + manejo de CAPTCHAs + truco de tokens, sobre sitios de práctica legales (toscrape.com).

La librería bytecraw/

Las 5 técnicas envueltas en una sola API limpia (estilo SDK).

from bytecraw import Scraper

bot = Scraper(delay=0.5)

# Estrategias explícitas
page = bot.static("https://books.toscrape.com")          # 1 · HTML estático
page = bot.browser("https://quotes.toscrape.com/js")     # 2 · JS dinámico
data = bot.api("https://quotes.toscrape.com/api/quotes") # 3 · API JSON
page = bot.fetch(url, strategy="auto")                   # auto: estático -> navegador

# Extraer registros con selectores (soporta ::text y ::attr(nombre))
libros = page.extract("article.product_pod", {
    "titulo": "h3 a::attr(title)",
    "precio": "p.price_color::text",
})

# Crawling con paginación
items = bot.crawl(url, item="div.quote",
    fields={"frase": "span.text::text", "tags[]": "a.tag::text"},
    next="li.next a::attr(href)")

# 5 · Sesión con login + CSRF
s = bot.session().login(url, data=creds, csrf_field="csrf_token")
home = s.fetch("https://quotes.toscrape.com")

# LLM: HTML -> Markdown limpio (menos tokens)
md = page.markdown()
print(page.tokens(), "->", page.tokens(of=md))

Landing page + dashboard

  • http://127.0.0.1:5000/landing — landing estilo Vercel/chat-sdk.dev
  • http://127.0.0.1:5000/ — dashboard interactivo (ejecuta cada técnica + tiempos)

La estrategia mental

Ante un sitio nuevo, prueba en este orden (de más limpio a más costoso):

  1. ¿Hay una API por detrás? (técnica 3) → datos JSON limpios, lo mejor.
  2. ¿El HTML es estático? (técnica 1) → rápido y sencillo.
  3. ¿Solo se ve con JavaScript? (técnica 2) → saca el navegador.
  4. ¿Son miles de páginas? (técnica 4) → Scrapy.
  5. ¿Está detrás de login? (técnica 5) → sesión autenticada.

Archivos

Archivo Técnica Sitio Genera
01_estatico_bs4.py 1. HTML estático (requests + BeautifulSoup) books.toscrape.com libros.csv
02_dinamico_playwright.py 2. JS dinámico (Playwright) quotes.toscrape.com/js frases.json
03_api_red.py 3. API interceptada quotes.toscrape.com/api frases_api.json
04_scrapy_spider.py 4. Scrapy a escala quotes.toscrape.com frases_scrapy.json
05_api_con_login.py 5. API con login/sesión quotes.toscrape.com/login (consola)
extra_captcha.py Manejo de CAPTCHAs (notas + ejemplos)
extra_html_a_markdown.py HTML→Markdown (ahorro de tokens) quotes.toscrape.com pagina.md

Instalación

cd /Users/array101/scrapping
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
playwright install chromium   # solo para la técnica 2

Cómo aprender con esto

  1. Corre 03_api_red.py y luego 02_dinamico_playwright.py: misma data, compara la velocidad. Entenderás por qué buscar la API primero.
  2. Corre 01_estatico_bs4.py para el caso clásico estático.
  3. Corre 04_scrapy_spider.py para ver el crawling a escala.
  4. Corre 05_api_con_login.py para el patrón de sesión + token CSRF (es el patrón que aplicarías a tu dashboard de Kapso).
  5. Lee extra_captcha.py y corre extra_html_a_markdown.py.

Nota ética

Practica en sitios hechos para ello (toscrape.com) o en tus propios sistemas. Respeta robots.txt y los Términos de Servicio. No abuses del rate limit.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bytecraw-0.1.0.tar.gz (7.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bytecraw-0.1.0-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

File details

Details for the file bytecraw-0.1.0.tar.gz.

File metadata

  • Download URL: bytecraw-0.1.0.tar.gz
  • Upload date:
  • Size: 7.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for bytecraw-0.1.0.tar.gz
Algorithm Hash digest
SHA256 3e49a55e8fc00947d386cf16c768c4356d8f020cfcf675b649f5f507ef5fb9dc
MD5 59d61128371ce9c7da42dc15b51bcd1f
BLAKE2b-256 ea13f6f043b70d46411bc24d71a7ce0f4cc47f653eca93b425fa0ddf813f02f8

See more details on using hashes here.

File details

Details for the file bytecraw-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: bytecraw-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 8.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for bytecraw-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6fefa0fc5f3e991f13d1f2c7b395dd589c9e49dbc71c7bad2e4ce91bf98d4971
MD5 572199f3bdebbae8b83103042536ecbe
BLAKE2b-256 a05d4e1c2f890e6e62a8195090933e0eec77bfdfbd1aef261bca76761304a286

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page