---
seo_title: Cargador LangChain para Páginas Web y Rastreo de Sitios | EnConvert
meta_desc: Instale langchain-enconvert para convertir páginas web y sitios completos en LangChain Documents para canalizaciones RAG, con puntuaciones de render_quality en cada página.
keywords: cargador de documentos langchain, cargador de página web langchain, rastreo de sitios langchain, perceive url langchain, ingest langchain, enconvert langchain, langchain-enconvert, canalización rag langchain, puntuación de calidad de perceive langchain
---

# Cargador LangChain para Páginas Web y Rastreo de Sitios

El cargador EnConvert para [LangChain](https://www.langchain.com) convierte páginas web y sitios completos en LangChain `Document`s. Perciba URLs individuales en markdown o rastree un sitio completo y devuelva un Document por fragmento listo para RAG. Cada renderizado de página lleva una puntuación `render_quality` (0,0–1,0) en sus metadatos, por lo que una página bloqueada o vacía se marca en lugar de confiar silenciosamente.

<div class="alert alert-info">
<strong>Paquete:</strong> <code>langchain-enconvert</code> · <strong>Fuente:</strong> <a href="https://github.com/enconvert/langchain-enconvert">enconvert/langchain-enconvert</a> · <strong>Requiere:</strong> <code>langchain-core>=0.3</code> · <strong>Licencia:</strong> MIT
</div>

---

## Instalación

```bash
pip install langchain-enconvert
```

---

## Agregue su clave API

El cargador requiere una credencial: **EnConvert API Key**.

```python
from langchain_enconvert import EnconvertLoader

loader = EnconvertLoader(api_key="sk_...")
# O establezca $ENCONVERT_API_KEY y omita el parámetro
loader = EnconvertLoader()
```

Genere una clave API **privada** en el [panel](/dashboard/api-keys). Las claves privadas comienzan con `sk_`. Las claves públicas `pk_` son rechazadas.

<div class="alert alert-warning">
<strong>Las claves públicas no funcionarán.</strong> Las claves que comienzan con <code>pk_</code> están destinadas a widgets del navegador y son rechazadas por el cargador. Obtenga más información en <a href="/docs/authentication#private-keys">Private Keys</a>.
</div>

---

## Usar EnconvertLoader

El cargador admite dos modos.

### Percibir algunas URLs

Convertir URLs individuales en `Document`s de markdown:

```python
from langchain_enconvert import EnconvertLoader

loader = EnconvertLoader(urls=["https://example.com", "https://example.com/pricing"])
docs = loader.load()
```

Los metadatos de cada Document llevan:
- `source`: la URL
- `render_quality`: un número de 0,0 (bloqueado/vacío) a 1,0 (renderizado limpio)

### Rastrear un sitio en fragmentos

Rastree un sitio completo y devuelva un Document por fragmento de contenido, listo para RAG:

```python
from langchain_enconvert import EnconvertLoader

loader = EnconvertLoader(
    ingest_url="https://docs.example.com",
    mode="sitemap",  # o "crawl" o "hybrid"
    max_pages=100
)
docs = loader.load()  # Bloquea hasta que se complete el rastreo
```

Los metadatos de cada Document llevan URL `source` propia del fragmento, título y contexto de sección.

El cargador sondea el trabajo de ingestión hasta completarse, así que `.load()` es síncrono. Para async verdadero, use `.lazy_load()` para iterar un Document a la vez.

---

## Construir una canalización RAG

Encadene el cargador en un divisor de texto y un almacén vectorial:

```python
from langchain_enconvert import EnconvertLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings

# Cargar y dividir
loader = EnconvertLoader(ingest_url="https://docs.example.com", mode="sitemap")
docs = loader.load()

# Incrustar e indexar
splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100)
chunks = splitter.split_documents(docs)

embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(chunks, embeddings)

# Consultar
retriever = vectorstore.as_retriever()
relevant = retriever.invoke("¿Cómo instalo esto?")
```

---

## Solución de problemas

**`raise ValueError("Provide either urls or ingest_url, but not both")`**
Pasó tanto `urls=` como `ingest_url=` al cargador. Elija uno: perciba URLs individuales o rastree un sitio. Pasar ninguno también genera un error.

**`AuthenticationError: 401 Unauthorized`**
La clave API es incorrecta o falta. Verifique que haya configurado `api_key=` o la variable de entorno `$ENCONVERT_API_KEY` en una clave **privada** (comienza con `sk_`). Las claves públicas son rechazadas inmediatamente.

**`El tiempo de carga parece muy largo.`**
Los rastreos de sitios son asíncronos. El cargador sondea hasta que se complete el trabajo, lo que puede tomar varios minutos en un sitio grande. Para una UX receptiva, use la API async (`await loader.aload()` en un contexto async) o sondee el estado del trabajo directamente a través de `/v2/ingest/{job_id}`.

**`render_quality es muy bajo para páginas que esperaba leer limpiamente.`**
Una puntuación baja (< 0,5) significa la página está bloqueada, vacía o tiene JavaScript pesado que no se renderizó a tiempo. Verifique la URL `source` sin procesar en un navegador para ver qué entrega realmente la página. Si es una aplicación de una sola página, un segundo renderizado podría tener éxito; si está bloqueada, no hay reintentos.

---

## Fuente y enlaces

- **Fuente**: [enconvert/langchain-enconvert](https://github.com/enconvert/langchain-enconvert)
- **Paquete**: [PyPI](https://pypi.org/project/langchain-enconvert)
- **Licencia**: MIT
- **Documentación de LangChain**: [python.langchain.com](https://python.langchain.com)
- **API subyacente**: [Introduction](/docs/introduction.md)

---

## Preguntas frecuentes

### ¿Cómo cargo una sola URL en un Document?

```python
from langchain_enconvert import EnconvertLoader
loader = EnconvertLoader(urls=["https://example.com"])
docs = loader.load()
```

El contenido de cada Document es el markdown de la página, y los metadatos llevan la URL `source` y puntuación `render_quality`.

### ¿Cómo rastro e indexo un sitio completo?

```python
loader = EnconvertLoader(ingest_url="https://docs.example.com", mode="sitemap", max_pages=100)
docs = loader.load()
```

El cargador bloquea hasta completarse el rastreo, luego devuelve un Document por fragmento. Use `mode="crawl"` para rastreo HTTP, `"sitemap"` para análisis de mapa del sitio o `"hybrid"` para ambos.

### ¿Cómo verifico la render_quality de una página?

Los metadatos de cada Document incluyen `render_quality`, puntuación de 0,0 a 1,0. Filtre documentos de alta calidad antes de indexar:

```python
for doc in docs:
    if doc.metadata.get('render_quality', 1.0) > 0.5:
        vectorstore.add_documents([doc])
```

### ¿Puedo transmitir Documents uno a la vez?

Sí, use `.lazy_load()`:

```python
for doc in loader.lazy_load():
    print(doc.page_content[:100])
```

### ¿Qué pasa si necesito rastrear muchos sitios?

Cree un cargador por sitio y llame a `.load()` secuencialmente, o use `.aload()` en un contexto async para distribuir rastreos en paralelo.
