Guía del shell interactivo de Scrapling¶
Un entorno REPL para extraer datos web, pensado para desarrolladores y profesionales de datos
El shell interactivo de Scrapling es un entorno basado en IPython, preparado para extraer datos web. Da acceso inmediato a todas las funciones de Scrapling, atajos útiles, gestión automática de páginas y herramientas como la conversión de comandos curl.
Requisitos previos
- Lee la página de conceptos básicos de los fetchers para entender qué es el objeto Response y qué fetcher usar.
- Lee la página de selección de elementos para aprender a buscar y extraer elementos de un objeto Selector/Response.
- Lee la página de clases principales para conocer las propiedades y los métodos que la clase Response hereda de Selector.
- Lee al menos una página de la sección de fetchers para las solicitudes que usarás aquí: solicitudes HTTP u obtención con navegador.
¿Por qué usar el shell interactivo?¶
Con el shell interactivo puedes explorar y probar al momento, sin tener que editar y ejecutar un script en cada intento. Es útil para:
- Crear prototipos rápidos: Prueba estrategias de extracción al instante.
- Explorar datos: Navega por sitios web y extrae datos de forma interactiva.
- Aprender Scrapling: Prueba sus funciones en tiempo real.
- Depurar scrapers: Revisa las solicitudes y sus resultados paso a paso.
- Convertir procesos: Convierte un comando curl de las DevTools del navegador en una solicitud de Fetcher con una sola línea.
Primeros pasos¶
Iniciar el shell¶
# Start the interactive shell
scrapling shell
# Execute code and exit (useful for scripting)
scrapling shell -c "get('https://quotes.toscrape.com'); print(len(page.css('.quote')))"
# Set logging level
scrapling shell --loglevel info
Al abrirlo, verás el banner de Scrapling y podrás empezar a extraer datos, como en el vídeo anterior:
# No imports needed - everything is ready!
get('https://news.ycombinator.com')
# Explore the page structure
page.css('a')[:5] # Look at first 5 links
# Refine your selectors
stories = page.css('.titleline>a')
len(stories) # 30
# Extract specific data
for story in stories[:3]:
title = story.text
url = story['href']
print(f"{title}: {url}")
# Try different approaches
titles = page.css('.titleline>a::text') # Direct text extraction
urls = page.css('.titleline>a::attr(href)') # Direct attribute extraction
Atajos incluidos¶
El shell ofrece atajos para evitar código repetido:
get(url, **kwargs)- Solicitud HTTP GET (en lugar deFetcher.get).post(url, **kwargs)- Solicitud HTTP POST (en lugar deFetcher.post).put(url, **kwargs)- Solicitud HTTP PUT (en lugar deFetcher.put).delete(url, **kwargs)- Solicitud HTTP DELETE (en lugar deFetcher.delete).fetch(url, **kwargs)- Obtención con un navegador Stealthy (en lugar deStealthyFetcher.fetch).
Las clases más usadas están disponibles sin importarlas, entre ellas Fetcher, AsyncFetcher, StealthyFetcher y Selector.
Gestión automática de páginas¶
El shell lleva un registro de tus solicitudes y páginas:
-
Acceso a la página actual
pageyresponsese actualizan de forma automática con la última página obtenida: -
Historial de páginas
pagesconserva las últimas cinco páginas en un objetoSelectors:get('https://site1.com') get('https://site2.com') get('https://site3.com') # Access last 5 pages len(pages) # `Selectors` object with `page` history -> 3 pages[0].url # First page in history -> 'https://site1.com' pages[-1].url # Most recent page -> 'https://site3.com' # Work with historical pages for i, old_page in enumerate(pages): print(f"Page {i}: {old_page.url} - {old_page.status}")
Otros comandos útiles¶
Ver la página¶
Abre las páginas obtenidas en tu navegador:
Integración con comandos curl¶
El shell incluye las funciones uncurl y curl2fetcher para convertir comandos curl de las DevTools del navegador en solicitudes de Fetcher.
Primero, copia una solicitud como comando curl:

-
Convertir un comando curl en un objeto de solicitud
curl_cmd = '''curl 'https://scrapling.requestcatcher.com/post' \ -X POST \ -H 'Content-Type: application/json' \ -d '{"name": "test", "value": 123}' ''' request = uncurl(curl_cmd) request.method # -> 'post' request.url # -> 'https://scrapling.requestcatcher.com/post' request.headers # -> {'Content-Type': 'application/json'} -
Ejecutar un comando curl directamente
Funciones de IPython¶
El shell hereda todas las funciones de IPython:
# Magic commands
%time page = get('https://example.com') # Time execution
%history # Show command history
%save filename.py 1-10 # Save commands 1-10 to file
# Tab completion works everywhere
page.c<TAB> # Shows: css, cookies, headers, etc.
Fetcher.<TAB> # Shows all Fetcher methods
# Object inspection
get? # Show get documentation
Ejemplos¶
Estos son algunos ejemplos generados con IA:
Recopilar datos de tiendas en línea¶
# Start with product listing page
catalog = get('https://shop.example.com/products')
# Find product links
product_links = catalog.css('.product-link::attr(href)').getall()
print(f"Found {len(product_links)} products")
# Sample a few products first
for link in product_links[:3]:
product = get(catalog.urljoin(link))
name = product.css('.product-name::text').get('')
price = product.css('.price::text').get('')
print(f"{name}: {price}")
# Scale up with sessions for efficiency
from scrapling.fetchers import FetcherSession
with FetcherSession() as session:
products = []
for link in product_links:
product = session.get(catalog.urljoin(link))
products.append({
'name': product.css('.product-name::text').get(''),
'price': product.css('.price::text').get(''),
'url': link
})
Integrar y probar API¶
>>> # Test API endpoints interactively
>>> response = get('https://jsonplaceholder.typicode.com/posts/1')
>>> response.json()
{'userId': 1, 'id': 1, 'title': 'sunt aut...', 'body': 'quia et...'}
>>> # Test POST requests
>>> new_post = post('https://jsonplaceholder.typicode.com/posts',
... json={'title': 'Test Post', 'body': 'Test content', 'userId': 1})
>>> new_post.json()['id']
101
>>> # Test with different data
>>> updated = put('https://jsonplaceholder.typicode.com/posts/1',
... json={'title': 'Updated Title'})
Obtener ayuda¶
Si necesitas más ayuda de la que ofrece la terminal, consulta:
¡Eso es todo! Disfruta extrayendo datos. El shell hace que obtener datos web sea tan fácil como una conversación.