| name | llm-friendly-web-crawler |
| version | 1.0.0 |
| description | Crawling web LLM-friendly con crawl4ai — output optimizado para LLMs, scraping asíncrono, extracción estructurada. Inspirado en unclecode/crawl4ai (⭐71K). |
| tags | ["crawler","scraping","llm","crawl4ai","web","extraction","async"] |
Crawler Web LLM-Friendly
Resumen
crawl4ai (⭐71K) es un crawler web open-source diseñado para LLMs. Genera output en markdown limpio, extrae datos estructurados, y soporta estrategias de extracción con LLM.
Cuándo usar
- Scrapear web y alimentar LLMs con contenido limpio
- Extracción estructurada de páginas (productos, artículos, datos)
- Crawling asíncrono de múltiples sitios en paralelo
- Preparar datos para RAG desde web
Patrón de uso
import asyncio
from crawl4ai import AsyncWebCrawler, CrawlerStrategy
async def crawl_site(url):
async with AsyncWebCrawler() as crawler:
result = await crawler.arun(url)
print(f"Markdown: {result.markdown[:500]}")
print(f"Links: {result.links}")
return result
async def crawl_with_extraction(url, schema):
async with AsyncWebCrawler() as crawler:
result = await crawler.arun(
url,
extraction_strategy=CrawlerStrategy(
type="json_schema",
schema=schema
)
)
return result.extracted_content
product_schema = {
"type": "object",
"properties": {
"name": {"type": "string"},
"price": {"type": "number"},
"description": {"type": "string"},
"image": {"type": "string"}
}
}
async def crawl_multiple(urls):
async with AsyncWebCrawler() as crawler:
tasks = [crawler.arun(url) for url in urls]
results = await asyncio.gather(*tasks)
return results
asyncio.run(crawl_site("https://example.com"))
Estrategias de extracción
| Estrategia | Cuándo | Output |
|---|
markdown | Content para LLM | Markdown limpio |
json_schema | Datos estructurados | JSON validado |
css_selector | Extracción por CSS | HTML/Text de elementos |
xpath | Extracción por XPath | HTML/Text de nodos |
llm_extraction | Extracción con LLM | JSON desde LLM |
Pitfalls
- Rate limiting: crawl4ai respeta robots.txt por defecto. Desactivar con cuidado.
- JavaScript: Sitios SPA necesitan JavaScript rendering. crawl4ai usa Playwright por defecto.
- Memory: Crawling de sitios grandes puede consumir mucha memoria. Usar
max_depth y max_pages.
- Output size: Markdown de páginas grandes puede superar context window. Truncar o chunk.
- Async: Todo es async. Usar
asyncio.run() o integrar en event loop existente.
Referencias
Hecho con ❤️ por David Antizar