ScrapegraphAI: Potenciando el Web Scraping con LLMs

Guías, Python, Scraping, Sep-27-20245 minutos de lectura

El scraping web ha evolucionado desde la simple extracción basada en reglas a técnicas más avanzadas que se basan en grandes modelos de lenguaje (LLM) para la extracción de datos conscientes del contexto. ScrapegraphAI está a la vanguardia de esta evolución, permitiendo el scraping web a través de potentes LLMs como OpenAI, Gemini, e incluso modelos locales como Ollama. En este blog, vamos a profundizar en lo que es ScrapegraphAI, cómo funciona, y caminar a través de un ejemplo del mundo real de los datos de raspado de un sitio web con la integración de proxy.

¿Qué aprenderás?

En este blog trataremos:

  • Qué es ScrapegraphAI y cómo funciona
  • Uso básico de ScrapegraphAI para el scraping de sitios web
  • Cómo integrar proxies para mejorar el rendimiento
  • Un ejemplo práctico utilizando el modelo GPT-4o-mini de OpenAI para extraer datos de libros del sitio web Books to Scrape.

Qué es ScrapegraphAI y cómo funciona

ScrapegraphAI es un robusto marco de raspado web (de código abierto) que aprovecha grandes modelos de lenguaje para extraer dinámicamente datos de sitios web. A diferencia de los scrapers tradicionales que se basan en rígidos selectores CSS o XPath, ScrapegraphAI utiliza LLMs para interpretar y extraer datos estructurados de una amplia gama de fuentes, incluyendo páginas web dinámicas y archivos como PDFs. Simplemente especifique la información que busca y deje que ScrapeGraphAI haga el trabajo pesado, proporcionando una opción más flexible y de bajo mantenimiento en comparación con las herramientas tradicionales de scraping. Una característica clave de ScrapegraphAI es su capacidad para permitir a los usuarios definir un esquema para los datos que desean extraer. El usuario puede especificar un formato estructurado para su salida, y ScrapegraphAI ajustará los datos extraídos para que coincidan con este esquema.

Una de las características más destacadas de ScrapegraphAI es su flexibilidad a la hora de elegir LLMs, con soporte para:

  • Modelos GPT de OpenAI como GPT-3.5 y GPT-4o-mini
  • Gemini para casos de uso más específicos
  • Modelos locales que utilizan Ollama para soluciones de raspado rentables y privadas

Pipelines de raspado clave

ScrapegraphAI ofrece varios pipelines de scraping estándar para adaptarse a diversas necesidades. Algunas de las más comunes son:

  • SmartScraperGraph: Un scraper de una sola página que sólo necesita un prompt de usuario y una fuente de entrada (sitio web o archivo local).
  • SearchGraph: Extrae información de los n primeros resultados de búsqueda de un buscador.
  • SpeechGraph: Extrae datos de una página y genera un archivo de audio a partir de los resultados.
  • ScriptCreatorGraph: Scrapea una sola página y genera un script en Python para futuras extracciones.
  • SmartScraperMultiGraph: Raspa datos de múltiples páginas usando un único prompt y una lista de URLs.
  • ScriptCreatorMultiGraph: Similar al anterior pero genera scripts Python para scraping multipágina.

En la siguiente sección, nos centraremos en SmartScraperGraph, que permite el scraping de una sola página simplemente proporcionando un prompt y una URL de origen.

Uso básico de ScrapegraphAI

Requisitos previos

Para seguir adelante, es necesario instalar algunas dependencias. Puede hacerlo ejecutando el siguiente comando:

pip install scrapegraphai openai python-dotenv
playwright install
  • scrapegraphai: Este es el paquete central para ScrapegraphAI.
  • openai: Usaremos el modelo GPT-4o-mini de OpenAI para el scraping.
  • python-dotenv: Esto nos permitirá cargar de forma segura variables de entorno como claves API desde un archivo .env.

Una vez que los hayas instalado, asegúrate de tener lista tu clave de API de OpenAI. Guárdala en un archivo .env para mantener tus credenciales seguras:

OPENAI_APIKEY=su_clave_openai_api_key

Ejemplo de código: Raspado de datos de libros para raspar

Digamos que queremos extraer información sobre todos los libros en Books to Scrape, incluyendo:

  • Nombre del libro
  • Precio
  • Disponibilidad
  • Reseñas

He aquí un ejemplo de código que utiliza el canal SmartScraperGraph de ScrapegraphAI:

import os
from dotenv import load_dotenv
from scrapegraphai.graphs import SmartScraperGraph

# Load the OpenAI API key from .env file
load_dotenv()
openai_key = os.getenv("OPENAI_APIKEY")

# Define configuration for the LLM
graph_config = {
   "llm": {
      "api_key": openai_key,
      "model": "openai/gpt-4o-mini",
   },
}

prompt = """
Extract all the books from this website including
- Book Name
- Price
- Availability 
- Reviews
"""

# Create the SmartScraperGraph instance
smart_scraper_graph = SmartScraperGraph(
   prompt=prompt,
   source="https://books.toscrape.com/",
   config=graph_config
)


if __name__ == '__main__':
   result = smart_scraper_graph.run()
   print(result)

Explicación del Código:

  • Configuración LLM: Configuramos ScrapegraphAI para utilizar OpenAI's GPT-4o-mini proporcionando la clave API y especificando el nombre del modelo.
  • Pregunta: La pregunta definida por el usuario indica a la IA que extraiga información del sitio web sobre cada libro, incluido el nombre, el precio, la disponibilidad y las reseñas.
  • URL de origen: Proporcionamos la URL del sitio web que queremos scrapear.
  • Funcionamiento del rascador: La ejecutar() inicia el proceso de scraping, y el resultado se imprime como una lista de diccionarios, cada uno de los cuales contiene detalles sobre un libro.

Ejemplo de salida

He aquí un ejemplo de cómo podría ser la salida:

{'Book Name': 'A Light in the Attic', 'Price': '£51.77', 'Availability': 'In stock', 'Reviews': 'NA'},
{'Book Name': 'Tipping the Velvet', 'Price': '£53.74', 'Availability': 'In stock', 'Reviews': 'NA'},
{'Book Name': 'Soumission', 'Price': '£50.10', 'Availability': 'In stock', 'Reviews': 'NA'},
{'Book Name': 'Sharp Objects', 'Price': '£47.82', 'Availability': 'In stock', 'Reviews': 'NA'},
# ... more books ...

Como puede ver, el scraper extrae con éxito los detalles de cada libro en un formato estructurado, listo para su uso en su canalización de datos.

Integración de proxy

Al hacer scraping a gran escala o dirigirse a sitios web con medidas anti-scraping, la integración de proxies resulta esencial para evitar prohibiciones de IP, captchas y limitaciones de velocidad. El uso de proxies no solo proporciona anonimato, sino que también garantiza que se puedan escrapear grandes cantidades de datos sin interrupciones.

Una de las mejores opciones para ello son los proxies residenciales, ya que proceden de direcciones IP residenciales reales, lo que los hace más difíciles de detectar y bloquear.

Los proxies residenciales de ProxyScrape son perfectos para escenarios de web scraping, especialmente cuando se dirigen a sitios web con estrictas medidas anti-scraping. Ofrecemos direcciones IP rotativas desde varias ubicaciones, lo que garantiza que sus solicitudes parezcan proceder de usuarios reales. Esto ayuda a eludir restricciones, evadir prohibiciones y garantizar un acceso continuo a los datos que necesita.

Veamos ahora cómo se integran los proxies con ScrapegraphAI:

from dotenv import load_dotenv
import os
from scrapegraphai.graphs import SmartScraperGraph

# Load the OpenAI API key from .env file
load_dotenv()
openai_key = os.getenv("OPENAI_APIKEY")

# Define the configuration with proxy integration
graph_config = {
   "llm": {
      "api_key": openai_key,
      "model": "openai/gpt-4o-mini",
   },
   "loader_kwargs": {
      "proxy": {
         "server": "rp.proxyscrape.com:6060",
         "username": "your_username",
         "password": "your_password",
      },
   },
}

prompt = """
Extract all the books from this website including
- Book Name
- Price
- Availability 
- Reviews
"""

# Create the SmartScraperGraph instance
smart_scraper_graph = SmartScraperGraph(
   prompt=prompt,
   source="https://books.toscrape.com/",
   config=graph_config
)

# Run the scraper and print the result
if __name__ == '__main__':
   result = smart_scraper_graph.run()
   print(result)

Explicación de la integración de proxy:

  • Configuración del proxy: El proxy se configura en loader_kwargs en la tecla graph_config. Aquí se define la dirección del servidor proxy, el nombre de usuario y la contraseña.
  • Esto asegura que todas las peticiones realizadas por ScrapegraphAI se enrutan a través del servidor proxy especificado, lo que ayuda a eludir las restricciones o evitar las prohibiciones de IP en el sitio web de destino.

Conclusión

En este blog, exploramos la potencia de ScrapegraphAI, una moderna herramienta de raspado web que utiliza grandes modelos de lenguaje (LLM) para extraer datos estructurados de sitios web de forma inteligente. Recorrimos sus características clave, incluyendo varios pipelines de scraping como el SmartScraperGraph, y proporcionamos un ejemplo práctico de scraping de datos de libros de un sitio web utilizando el modelo GPT-4o-mini de OpenAI.

También mostramos cómo integrar proxies, especialmente los proxies residenciales deProxyScrape. Los proxies son cruciales para permanecer en el anonimato, eludir las restricciones y mantener el acceso a los datos, especialmente con sitios que utilizan tácticas anti-scraping como prohibiciones de IP o límites de velocidad.

Al integrar los proxies residenciales deProxyScrape, se asegura de que sus actividades de web scraping sean más eficientes, seguras y escalables, incluso en los sitios web más difíciles.