Volver al blog

API de Scraping de ChatGPT: Extraer Datos Estructurados de Mapas y Negocios Locales

Isabella Garcia
Isabella Garcia

Web Data Collection Specialist

15-Jul-2026

Resumen:

  • El Scraper de ChatGPT (scraper.chatgpt) ahora devuelve un objeto map estructurado cuando una respuesta de ChatGPT incluye negocios locales.
  • Una POST a /api/v2/scraper/execute con un mensaje de intención local devuelve lugares clasificados con nombre, coordenadas, dirección, teléfono, sitio web, horarios, calificación, cantidad de reseñas, nivel de precio y el proveedor de listados.
  • Sin más análisis de prosa: los lugares que ChatGPT menciona en una respuesta "mejores cafeterías cerca de…" regresan como un arreglo limpio que puedes clasificar, filtrar y almacenar.
  • Los campos pueden ser nulos y de origen del proveedor: las calificaciones, horarios y distancias pueden estar ausentes por entidad, así que analiza de manera defensiva.
  • Comienza gratis. Las nuevas cuentas de Scrapeless incluyen créditos gratis para la API del Scraper — regístrate en app.scrapeless.com.

Cuando le preguntas a ChatGPT una pregunta local — "mejores cafeterías cerca de Times Square" — la respuesta nombra lugares reales, y hasta hace poco esos datos estaban bloqueados dentro de la prosa. La Scrapeless API de Scraping ahora los presenta como un objeto map dedicado: una lista clasificada de negocios con su perfil completo, lista para ordenar o monitorear. Esta guía muestra cómo solicitarlo, qué contiene el objeto y dónde los campos requieren atención. Cada solicitud y campo a continuación fue capturado de una ejecución en vivo del actor.

Lo Que Puedes Hacer Con Datos del Mapa de ChatGPT

El actor toma un mensaje de intención local y devuelve los negocios que ChatGPT presenta como entidades estructuradas. Prácticamente, eso te permite:

  • Rastrear la visibilidad del paquete local — ver qué negocios ChatGPT nombra para una consulta de "mejor X cerca de Y", en qué orden, con su calificación y cantidad de reseñas.
  • Construir conjuntos de datos de ubicación — extraer nombre, coordenadas, dirección, teléfono y sitio web de los lugares en una respuesta, los mismos campos de perfil que una API de lugares expone, sin raspar una interfaz de mapa.
  • Monitorear una marca o competidor — verificar si un negocio específico aparece en las recomendaciones locales de ChatGPT a lo largo del tiempo.
  • Alimentar sistemas posteriores — transferir las entidades clasificadas a tableros, mapas o alertas como JSON limpio.

Por Qué el Actor de ChatGPT de Scrapeless

Las respuestas de ChatGPT se generan detrás de una interfaz, no se sirven como un feed estructurado. El actor de Scrapeless ejecuta la consulta y devuelve un sobre amigable para desarrolladores, por lo que tu código lee campos en lugar de analizar una respuesta con regex, manejar un navegador o mantener infraestructura anti-bloqueo. El objeto map es parte de la misma respuesta que ya obtienes del actor de ChatGPT, junto con el texto de respuesta, resultados de búsqueda y productos.

Punto de Acceso y Parámetros

El actor funciona en el punto de acceso síncrono de la API del Scraper. Autentícate con tu token en el encabezado x-api-token.

  • Punto de Acceso: POST https://api.scrapeless.com/api/v2/scraper/execute
  • Actor: scraper.chatgpt
Campo de entrada Tipo Requerido Descripción
prompt string La pregunta para enviar a ChatGPT. Usa intención local (por ej. "mejor café cerca de…") para poblar map.
country string Código de país objetivo, por ej. US.
web_search bool no Habilitar enriquecimiento de búsqueda web; recomendado para consultas locales.
shopping bool no Obtener datos de productos en products (facturado a una tasa más alta).

El objeto map aparece en el task_result cuando la respuesta contiene negocios locales; un mensaje no local devuelve un map vacío.

Solicitud Autenticada

Una solicitud mínima se ve así (ilustrativa — reemplaza el token):

bash Copy
curl 'https://api.scrapeless.com/api/v2/scraper/execute' \
  --header 'Content-Type: application/json' \
  --header 'x-api-token: YOUR_API_TOKEN' \
  --data '{
    "actor": "scraper.chatgpt",
    "input": {
      "prompt": "mejores cafeterías cerca de Times Square Nueva York",
      "country": "US",
      "web_search": true
    }
  }'

Integración con Python

Este ejemplo lee el token de la variable de entorno SCRAPELESS_API_KEY, envía una consulta local y imprime los lugares clasificados desde el objeto map. Utiliza solo la biblioteca estándar de Python.

python Copy
import json
import os
import urllib.request

API_URL = "https://api.scrapeless.com/api/v2/scraper/execute"
API_TOKEN = os.environ["SCRAPELESS_API_KEY"]

payload = {
    "actor": "scraper.chatgpt",
    "input": {
        "prompt": "mejores cafeterías cerca de Times Square Nueva York",
        "country": "US",
        "web_search": True,
    },
}

request = urllib.request.Request(
    API_URL,
    data=json.dumps(payload).encode("utf-8"),
    headers={"Content-Type": "application/json", "x-api-token": API_TOKEN},
    method="POST",
)

with urllib.request.urlopen(request, timeout=180) as response:

data = json.loads(response.read().decode("utf-8"))

result = data.get("task_result", {})
entities = (result.get("map") or {}).get("entities") or []

print("estado:", data.get("status"))
print("entidades del mapa:", len(entities))

for lugar in entities[:5]:
interno = lugar.get("entity", {})
print("-", lugar.get("name"))
print(" calificación:", interno.get("rating"), "| reseñas:", interno.get("review_count"), "| precio:", interno.get("price_str"))
print(" dirección:", interno.get("address"))

El Objeto Mapa

El objeto map vive en task_result y contiene una lista de entities clasificadas, además de una lista de raw_search_entities no clasificadas. Los campos a continuación son los que utilizarás más; los valores son una muestra ilustrativa de una ejecución en vivo, recortados por longitud.

json Copy
// Muestra ilustrativa de una ejecución en vivo de scraper.chatgpt — los nombres de los campos son reales, los valores recortados.
{
  "status": "éxito",
  "task_result": {
    "map": {
      "entities": [
        {
          "name": "Frisson Espresso",
          "category": "cafetería",
          "latitude": 40.760837,
          "longitude": -73.9889995,
          "entity": {
            "address": "326 W 47th St, Nueva York, NY 10036, Estados Unidos",
            "phone": "+1 646-850-3928",
            "website_url": "<sitio web del negocio>",
            "hours": [{ "day": 5, "start": "0700", "end": "1800" }],
            "is_open": false,
            "categories": ["Cafetería", "Café", "Bar de espresso"],
            "rating": 4.6,
            "review_count": 1006,
            "price_str": "$",
            "provider": "yelp-feed",
            "provider_url": "<URL del listado del proveedor>",
            "distance_meters": null
          }
        }
      ],
      "raw_search_entities": []
    }
  }
}
Campo Tipo Descripción
entities array Lugares clasificados que ChatGPT encontró para la consulta.
entities[].name string Nombre del negocio.
entities[].latitude / longitude number Coordenadas para el pin en el mapa.
entities[].category string Tipo de entidad, por ejemplo, cafetería.
entities[].entity.address string Dirección completa.
entities[].entity.phone string Número de teléfono.
entities[].entity.website_url string Sitio web oficial.
entities[].entity.hours array Horarios de apertura por día.
entities[].entity.is_open bool Si está abierto ahora.
entities[].entity.categories array Etiquetas de categoría legibles por humanos.
entities[].entity.rating number Calificación promedio.
entities[].entity.review_count number Número de reseñas.
entities[].entity.price_str string Nivel de precios, por ejemplo, $.
entities[].entity.provider string Fuente del listado, por ejemplo, yelp-feed.
entities[].entity.provider_url string Página de listado del proveedor.
entities[].entity.distance_meters number Distancia desde la ubicación buscada; puede ser nula.
raw_search_entities array Entidades candidatas no clasificadas.

Una consulta en vivo para cafés cerca de Times Square devolvió ocho lugares clasificados; el resultado principal, Frisson Espresso, regresó con una calificación de 4.6 sobre 1,006 reseñas, un nivel de precio $, horarios de apertura completos y su proveedor de listado adjunto.

Problemas Comunes de Forma de Datos

  • map está vacío para consultas no locales. El objeto solo se llena cuando la respuesta contiene negocios. Si obtienes un map vacío, la consulta no tenía intención local; agrega un lugar al aviso y habilita web_search.
  • El perfil del lugar está anidado un nivel más abajo. Los campos de clasificación (name, latitude, longitude, category) están en la entidad, pero los campos de contacto y perfil están bajo entity.*. Lee place["entity"]["rating"], no place["rating"].
  • Los campos son provistos por los proveedores y pueden ser nulos. distance_meters, hours, e incluso rating pueden ser nulos para una entidad dada dependiendo del proveedor, así que protégete antes de usarlos.
  • Usa raw_search_entities para recuperación. La lista clasificada de entities es lo que ChatGPT encontró; raw_search_entities contiene candidatos adicionales cuando necesitas una cobertura más amplia.

Actores Compañeros

El objeto map es una parte de la respuesta de ChatGPT, que también lleva el texto de respuesta, search_result, y products. La misma forma de solicitud cubre los otros motores de respuesta; intercambia scraper.chatgpt por scraper.gemini, scraper.perplexity y el resto. Scrapeless publica un repositorio de ejemplo de scraper de ChatGPT en código abierto con código ejecutable, y para ver el sobre completo de respuesta consulta la guía de la API de Scraper de ChatGPT.

Conclusión

El objeto map del ChatGPT Scraper convierte una recomendación local conversacional en datos estructurados: envía un aviso de intención local, lee una lista clasificada de negocios con coordenadas, detalles de contacto, horarios, calificación y proveedor. Recuerda que los campos de perfil están anidados bajo entity, que algunos campos pueden ser nulos y que un aviso no local devuelve un mapa vacío. Los datos del lugar subyacente provienen de proveedores como Yelp, y la estructura de respuesta circundante está documentada en la referencia del actor de ChatGPT.

¿Listo para capturar los datos locales de ChatGPT? Comienza gratis desde el tablero de Scrapeless, ve dónde se ajusta el actor en la página de producto de la API de scraping, o compara planes en precios de Scrapeless.

Preguntas Frecuentes

P: ¿Qué es el objeto map de ChatGPT?
R: Es un campo estructurado en la respuesta de scraper.chatgpt que lista los negocios locales que ChatGPT presenta para una consulta, cada uno con nombre, coordenadas, dirección, teléfono, sitio web, horarios, calificación, número de reseñas, nivel de precio y el proveedor de listado.

P: ¿Cómo hago que el objeto map se rellene?
R: Envía un aviso con intención local (una pregunta del estilo "mejor X cerca de Y") y activa web_search. Un aviso no local devuelve un map vacío.

P: ¿Qué endpoint y parámetros utiliza?
R: POST https://api.scrapeless.com/api/v2/scraper/execute con actor configurado en scraper.chatgpt y un objeto input conteniendo prompt, country y opcionalmente web_search. Autentica con tu token en x-api-token.

P: ¿Dónde están la calificación y la dirección en la respuesta?
R: Los campos de clasificación como name y coordenadas están en el entidad, pero los campos de contacto y perfil — address, phone, rating, review_count, hours — están bajo entity.*. Lee place["entity"]["rating"].

P: ¿Los campos siempre están presentes?
R: No. Los valores son proporcionados por el proveedor, por lo que distance_meters, hours y rating pueden ser nulos para una entidad dada. Protege los valores faltantes antes de usarlos.

P: ¿Puedo usar el mismo código para otros asistentes de IA?
R: Sí. El actor de ChatGPT comparte la forma de solicitud del LLM Chat Scraper, por lo que cambiar scraper.chatgpt por scraper.gemini o scraper.perplexity reutiliza la misma integración.

En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.

Artículos más populares

Catalogar