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).

Instalar desde PyPI

python3 -m venv .venv
source .venv/bin/activate
python3 -m pip install "bytecraw[all]"   # incluye navegador + Markdown
python3 -m playwright install chromium   # solo si usas .browser()
  • bytecraw → solo HTML estático y APIs (ligero).
  • bytecraw[llm] → agrega .markdown() (markdownify + trafilatura).
  • bytecraw[all] → todo, incluido Playwright para .browser().

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.1.tar.gz (8.1 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.1-py3-none-any.whl (8.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: bytecraw-0.1.1.tar.gz
  • Upload date:
  • Size: 8.1 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.1.tar.gz
Algorithm Hash digest
SHA256 7495f80e9e0b9421f35265f2cdbedb4054320859ba4da8a1f37777600469d5f0
MD5 aa2bf23e96eae2cd0b5ff3e90181131e
BLAKE2b-256 e8f1f45b2d125eaeba201330f8edb311838787ba46e90e69db4c0c898c24a449

See more details on using hashes here.

File details

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

File metadata

  • Download URL: bytecraw-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 8.5 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a759875b846ac129008028fe7666c88cd72dbb6d61d520277ac9b92c83c47555
MD5 4e5f8cce30cfd659cb6bd07e534a6726
BLAKE2b-256 59af3157b391b275bc98c808ad622c72b9e3c594880c7df34cd7b3df10faaced

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