Alguien dijo Web Scraping😏
By the way, recomiendo ampliamente el curso de 'LangChain para Manejo y Recuperación de Documentos', gran curso👌
En esta clase, exploramos cómo LangChain nos permite cargar y procesar archivos HTML utilizando herramientas especializadas llamadas document loaders. A continuación, desglosamos los puntos clave para aprovechar esta funcionalidad, así como algunos conceptos y buenas prácticas para gestionar múltiples archivos y directorios.
1. Carga de Archivos HTML en LangChain
Los archivos HTML son esenciales para estructurar y visualizar contenido en la web. LangChain permite cargar estos archivos y tratarlos como documentos procesables, lo que significa que puedes extraer texto, metadatos y hacer análisis sobre el contenido utilizando document loaders.
a) Document Loaders para HTML
LangChain tiene loaders específicos para diferentes tipos de archivos, incluido HTML. Uno de los más comunes es Beautiful Soup, una biblioteca en Python utilizada para trabajar con archivos HTML, facilitando la extracción de información estructurada.
Proceso de carga de HTML:
b) Extracción de Contenido y Metadatos
Cuando cargamos un archivo HTML, LangChain no solo permite acceder al texto del documento, sino también a los metadatos asociados, como el nombre del archivo, la ruta, el título, etc. Estos metadatos pueden ser útiles en proyectos donde se necesita hacer referencia a la fuente de la información o en casos de análisis de grandes cantidades de documentos.
2. Cargar Directorios con Archivos Múltiples
Una de las funcionalidades más poderosas de LangChain es la capacidad de cargar directorios completos que contienen múltiples archivos, como PDFs, CSVs o HTMLs. Esto es especialmente útil cuando se trabaja con grandes volúmenes de datos distribuidos en diferentes archivos.
a) Carga de Directorios
Puedes cargar todo el contenido de un directorio y especificar qué tipo de archivos deseas procesar (por ejemplo, solo HTML o solo CSV). Esto se realiza a través de un directory loader, que automatiza la carga de archivos múltiples y permite procesarlos en secuencia.
b) Barra de Progreso
Cuando trabajas con muchos archivos, LangChain ofrece una opción para mostrar una barra de progreso, que te permite visualizar el estado de carga de cada documento en tiempo real. Esto es útil en proyectos grandes donde el tiempo de carga puede variar dependiendo de la cantidad de archivos y su tamaño.
3. Integración con Google Drive y Google Colaboratory
Si trabajas en Google Colab, una buena práctica es utilizar Google Drive para almacenar y acceder a los archivos. LangChain permite fácilmente conectar tu entorno de trabajo con Google Drive, lo que facilita la carga y el procesamiento de archivos.
a) Cargar Archivos desde Google Drive
4. Buenas Prácticas para Trabajar con Documentos
En esta clase, exploramos cómo LangChain nos permite cargar y procesar archivos HTML utilizando herramientas especializadas llamadas document loaders. A continuación, desglosamos los puntos clave para aprovechar esta funcionalidad, así como algunos conceptos y buenas prácticas para gestionar múltiples archivos y directorios.
Los archivos HTML son esenciales para estructurar y visualizar contenido en la web. LangChain permite cargar estos archivos y tratarlos como documentos procesables, lo que significa que puedes extraer texto, metadatos y hacer análisis sobre el contenido utilizando document loaders.
LangChain tiene loaders específicos para diferentes tipos de archivos, incluido HTML. Uno de los más comunes es Beautiful Soup, una biblioteca en Python utilizada para trabajar con archivos HTML, facilitando la extracción de información estructurada.
Proceso de carga de HTML:
Cuando cargamos un archivo HTML, LangChain no solo permite acceder al texto del documento, sino también a los metadatos asociados, como el nombre del archivo, la ruta, el título, etc. Estos metadatos pueden ser útiles en proyectos donde se necesita hacer referencia a la fuente de la información o en casos de análisis de grandes cantidades de documentos.
Una de las funcionalidades más poderosas de LangChain es la capacidad de cargar directorios completos que contienen múltiples archivos, como PDFs, CSVs o HTMLs. Esto es especialmente útil cuando se trabaja con grandes volúmenes de datos distribuidos en diferentes archivos.
Puedes cargar todo el contenido de un directorio y especificar qué tipo de archivos deseas procesar (por ejemplo, solo HTML o solo CSV). Esto se realiza a través de un directory loader, que automatiza la carga de archivos múltiples y permite procesarlos en secuencia.
Cuando trabajas con muchos archivos, LangChain ofrece una opción para mostrar una barra de progreso, que te permite visualizar el estado de carga de cada documento en tiempo real. Esto es útil en proyectos grandes donde el tiempo de carga puede variar dependiendo de la cantidad de archivos y su tamaño.
Si trabajas en Google Colab, una buena práctica es utilizar Google Drive para almacenar y acceder a los archivos. LangChain permite fácilmente conectar tu entorno de trabajo con Google Drive, lo que facilita la carga y el procesamiento de archivos.
Alguien dijo Web Scraping😏
By the way, recomiendo ampliamente el curso de 'LangChain para Manejo y Recuperación de Documentos', gran curso👌
Una de las funcionalidades clave de LangChain es la capacidad de cargar y procesar diversos tipos de datos, incluyendo documentos HTML y directorios completos. Esto permite crear aplicaciones de IA que pueden comprender y responder a una amplia variedad de información.
LangChain ofrece varias opciones para cargar archivos HTML, cada una con sus propias características y ventajas:
Pythonfrom langchain.document_loaders import UnstructuredHTMLLoader
loader = UnstructuredHTMLLoader("example_data/fake-content.html")
data = loader.load()
Usa el código con precaución.
Pythonfrom langchain.document_loaders import BSHTMLLoader
loader = BSHTMLLoader("example_data/fake-content.html")
data = loader.load()
Usa el código con precaución.
Pythonfrom langchain_community.document_loaders import SpiderLoader
loader = SpiderLoader(api_key="YOUR_API_KEY", url="https://spider.cloud")
data = loader.load()
Usa el código con precaución.
Para cargar todos los archivos de un directorio, LangChain proporciona el cargador DirectoryLoader. Puedes especificar patrones para filtrar los archivos que deseas cargar.
Pythonfrom langchain.document_loaders import DirectoryLoader
loader = DirectoryLoader("my_documents", glob="*.pdf") # Cargar todos los PDF
data = loader.load()
Usa el código con precaución.
Una vez que has cargado los documentos, puedes realizar diversas operaciones, como:
Pythonfrom langchain.vectorstores import FAISS
# Crear un índice
vectorstore = FAISS.from_documents(data)
# Realizar una búsqueda
query = "Cuál es la capital de Francia?"
docs = vectorstore.similarity_search(query)
Usa el código con precaución.
LangChain ofrece una forma sencilla y flexible de cargar y procesar documentos HTML y directorios completos. Al combinar estas capacidades con los modelos de lenguaje de gran tamaño, puedes crear aplicaciones de IA potentes y personalizadas.
¿Tienes alguna pregunta específica sobre la carga de HTML y directorios con LangChain? Por ejemplo, podemos explorar:
Si les da error usando
loader = BSHTMLLoader(file_path)
pueden cambiar a
loader = BSHTMLLoader(file_path, bs_kwargs={"features": "html.parser"})
Para cargar un archivo HTML en Google Colab, debes seguir estos pasos:
Guardar el archivo en Google Drive: Crea una carpeta en tu Google Drive y sube el archivo HTML allí.
Conectar Google Colab a Google Drive: Usa el siguiente código en una celda de Colab para montar tu Google Drive:
from google.colab import drive
drive.mount('/content/drive')
Acceder al archivo: Después de montar, puedes acceder a tu archivo HTML usando la ruta correspondiente, por ejemplo:
file_path = '/content/drive/My Drive/tu_carpeta/tu_archivo.html'
Luego, puedes utilizar el cargador de HTML en LangChain para procesarlo.
Hola, si quieren cargar contenido web desde un link pueden hacerlo con la clase WebBaseLoader de langchain_community.document_loaders de la siguiente manera
from langchain\_community.document\_loaders import WebBaseLoader
loader = WebBaseLoader("https://url.com")
docs = loader.load()
print(docs)
¿Puedo cargar un html que se encuentra en la web (no en mi máquina local)?
Reto completado en base a la ruta de cada archivo se usa un loader o otro
from langchain_community.document_loaders import DirectoryLoader
!pid install langchain_community
!pip install unstructured
!pip install unstructured[pdf]
!pip install unstructured[docx]
!pip install unstructured[excel]
from langchain.document_loaders import PyPDFLoader, CSVLoader, BSHTMLLoader, TextLoader
import os
# Directorio que contiene los archivos
directory_path = "/content/documents"
files = [os.path.join(directory_path, f) for f in os.listdir(directory_path)]
for file_path in files:
if file_path.endswith(".pdf"):
print(f"Procesando PDF: {file_path}")
loader = PyPDFLoader(file_path)
docs = loader.load()
for doc in docs:
print(f"Contenido (primeros 100 caracteres): {doc.page_content[:100]}...\n")
elif file_path.endswith(".csv"):
print(f"Procesando CSV: {file_path}")
loader = CSVLoader(file_path=file_path)
data = loader.load()
for record in data[:4]:
print(record)
elif file_path.endswith(".html"):
print(f"Procesando HTML: {file_path}")
loader = BSHTMLLoader(file_path)
data = loader.load()
for doc in data:
print(f"Contenido (primeros 100 caracteres): {doc.page_content[:100]}...\n")
elif file_path.endswith(".md"):
print(f"Procesando Markdown: {file_path}")
loader = TextLoader(file_path)
docs = loader.load()
for doc in docs:
print(f"Contenido (primeros 100 caracteres): {doc.page_content[:100]}...\n")
else:
print(f"Archivo no soportado: {file_path}")
📚 CLASE: CARGAR HTML Y DIRECTORIOS CON LANGCHAIN
━━━━━━━━━━━━━━━━━━
🎯 IDEA PRINCIPAL
🟡 Para construir aplicaciones de IA que respondan preguntas sobre documentos, primero necesitas convertir los archivos en información que Python pueda procesar.
🔵 LangChain utiliza Document Loaders para leer archivos y transformarlos en objetos Document con contenido y metadatos.
🟢 Puedes cargar archivos HTML individuales o recorrer directorios completos que contengan múltiples documentos.
🟣 Esta capacidad es uno de los primeros pasos para construir un sistema RAG que responda preguntas basándose en archivos propios.
━━━━━━━━━━━━━━━━━━
⚡ RESUMEN ULTRA RÁPIDO
🔵 BSHTMLLoader: carga archivos HTML y extrae su texto y metadatos.
🔵 DirectoryLoader: busca archivos dentro de un directorio y los procesa con el cargador configurado.
🔵 Document: representa el contenido extraído y sus metadatos, como la ruta del archivo.
🔵 BeautifulSoup: analiza HTML y permite extraer su contenido textual.
🟢 glob: permite seleccionar qué archivos se deben procesar, por ejemplo, solo los que terminan en .html.
🟣 Aplicación práctica: preparar documentación, páginas web guardadas y archivos internos para búsquedas semánticas o sistemas RAG.
━━━━━━━━━━━━━━━━━━
🧠 LO IMPORTANTE
🔹 1. CARGAR UN ARCHIVO HTML
🔵 HTML es el formato que estructura el contenido de una página web mediante etiquetas.
🔵 BSHTMLLoader utiliza Beautiful Soup para extraer texto y metadatos de un archivo HTML local.
🟢 Instala las dependencias en tu entorno virtual con pip install -U langchain-community beautifulsoup4.
🟢 Importa BSHTMLLoader desde langchain_community.document_loaders.
🟢 Define la ruta del archivo HTML y crea el cargador con BSHTMLLoader(file_path="documentos/pagina.html").
🟢 Ejecuta docs = loader.load() para obtener los documentos procesados.
🟢 Inspecciona docs[0].page_content para consultar el texto extraído y docs[0].metadata para ver los metadatos.
🟡 Normalmente, el contenido queda en page_content y la ruta de origen y el título aparecen en metadata.
🔹 2. CARGAR UN DIRECTORIO COMPLETO
🔵 DirectoryLoader automatiza la búsqueda y carga de múltiples archivos de una carpeta.
🟢 Define la carpeta que contiene los documentos y utiliza glob para seleccionar los archivos que quieres procesar.
🟢 Por ejemplo, glob="**/*.html" selecciona archivos HTML, incluidos los de subdirectorios.
🟢 Configura loader_cls=BSHTMLLoader para utilizar el cargador HTML correspondiente.
🟢 Ejecuta docs = loader.load() y recorre los documentos obtenidos para revisar su contenido.
🟡 DirectoryLoader utiliza por defecto un cargador basado en Unstructured; especificar loader_cls permite controlar cómo se interpretan los archivos.
🔹 3. CARGAR PÁGINAS WEB DESDE INTERNET
🔵 Un archivo HTML local y una página web remota son fuentes diferentes.
🟢 Para cargar una URL, puedes utilizar WebBaseLoader desde langchain_community.document_loaders.
🟢 Para utilizarlo, instala las dependencias necesarias, proporciona la URL y ejecuta load().
🔴 Algunas páginas requieren JavaScript, autenticación o mecanismos especiales; un cargador HTML sencillo puede no extraer todo el contenido.
🟡 Antes de recopilar páginas web, verifica los permisos de acceso, las condiciones del sitio y los límites de solicitudes.
🔹 4. PROCESAR DIFERENTES FORMATOS
🔵 BSHTMLLoader está orientado a HTML.
🔵 CSVLoader permite cargar datos tabulares de archivos CSV.
🔵 PyPDFLoader permite extraer contenido de documentos PDF.
🔵 TextLoader permite leer archivos de texto plano.
🟢 Cuando un directorio contiene varios formatos, puedes utilizar cargadores específicos según el tipo de archivo o una solución compatible con varios formatos.
🟣 Para proyectos grandes, centraliza la selección de cargadores en una función reutilizable en lugar de repetir la lógica por todo el código.
━━━━━━━━━━━━━━━━━━
🧩 MODELO MENTAL
🔵 Loader: lee el archivo o la fuente de información.
🔵 Document: representa el contenido procesado y sus metadatos.
🔵 Directorio: agrupa los archivos que quieres incorporar al sistema.
🔵 Procesamiento posterior: limpia, divide y prepara el contenido para la tarea de IA.
🟣 Piensa en los loaders como la puerta de entrada de tus datos: preparan la información para que otras partes de la aplicación puedan trabajar con ella.
━━━━━━━━━━━━━━━━━━
🛠️ ACCIONES PARA HOY
🟢 Acción 1 — Crear un lector HTML.
🟢 Crea una carpeta llamada documentos dentro de tu proyecto.
🟢 Guarda un archivo HTML de prueba dentro de ella.
🟢 Instala langchain-community y beautifulsoup4 en tu entorno virtual.
🟢 Carga el archivo con BSHTMLLoader e imprime su contenido y metadatos.
🟢 Acción 2 — Cargar varios archivos.
🟢 Crea una subcarpeta con dos o tres archivos HTML de prueba.
🟢 Configura DirectoryLoader con la carpeta raíz, glob="**/*.html", loader_cls=BSHTMLLoader y recursive=True.
🟢 Ejecuta la carga y comprueba cuántos documentos se han obtenido.
🟢 Recorre los resultados e imprime el título y los primeros 200 caracteres de cada documento.
🟢 Acción 3 — Preparar documentos para RAG.
🟢 Conserva el texto y los metadatos de cada documento.
🟢 Divide los documentos extensos en fragmentos utilizando un separador de texto de LangChain.
🟢 Comprueba que cada fragmento conserva información suficiente para identificar su fuente.
🟣 Reto integrador: carga una carpeta de documentos HTML, extrae su contenido y prepara los fragmentos para incorporarlos posteriormente a un sistema de búsqueda semántica.
━━━━━━━━━━━━━━━━━━
💼 VENTAJA PROFESIONAL
🟣 Para RAG: los loaders permiten convertir documentos propios en una colección de información consultable.
🟣 Para automatización: puedes procesar carpetas de documentación sin abrir cada archivo manualmente.
🟣 Para aplicaciones web: puedes preparar contenido para que un asistente responda preguntas sobre manuales, guías o documentación interna.
🟣 Para mantener el código: separar la carga de datos de la lógica del modelo facilita probar y reemplazar componentes.
🔴 Error frecuente: creer que cargar documentos ya crea un sistema RAG. Todavía necesitas fragmentación, embeddings, almacenamiento o índice, recuperación de información y generación de respuestas.
━━━━━━━━━━━━━━━━━━
🚀 CIERRE
🟡 La idea central es convertir distintas fuentes de información en objetos Document que LangChain pueda procesar de manera uniforme.
🟢 Empieza cargando un HTML individual; después automatiza la lectura de directorios y prepara los documentos para fragmentarlos.
🟣 Para tu aprendizaje de agentes de IA, este paso construye la base para crear asistentes que consulten documentación propia en lugar de depender exclusivamente del conocimiento del modelo.
¿Cómo cargo directorios enteros en LangChain?
Para procesar múltiples archivos a la vez, debes utilizar un cargador de directorios (DirectoryLoader). Piensa en esto como contratar a un asistente que entra a una oficina (tu carpeta) y lee todos los documentos por ti. En lugar de escribir código para abrir archivo por archivo, le pasas la ruta de la carpeta principal. El truco clave aquí es usar el parámetro de filtrado para especificar el tipo de archivo. Por ejemplo, si solo quieres los archivos web, le indicas que busque exclusivamente extensiones .html. De esta manera, el asistente ignorará las imágenes o archivos de texto irrelevantes y aplicará el cargador específico únicamente a los archivos correctos. Es la forma más eficiente de ingestar bases de conocimiento masivas en un solo paso.
Para cargar una pagina web sin utilizar beautifulsoup pueden utilizar solo request para descargar la pagina:
url = 'https://en.wikipedia.org/wiki/Deep_learning'
headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get(url, headers=headers)
with open("Deep_learning.html", "w", encoding="utf-8") as f:
f.write(response.text)