Naver no es un solo sitio. El nivel de bloqueo varía según el servicio.
Tiempo de lectura: 14 minutos | A partir de enero de 2026
Resumen clave
Naver es el portal más grande que ocupa aproximadamente el 55% del mercado de búsqueda en Corea. Hay una amplia variedad de servicios de Naver como Naver Shopping, blogs, cafés, Smart Store, etc., que se desean rastrear.
El problema radica en que cada servicio tiene diferentes métodos y niveles de bloqueo. Los blogs son relativamente fáciles de rastrear, mientras que Smart Store incluso tiene CAPTCHAs. "Rastreo de Naver" no es un solo problema, sino uno separado para cada servicio.
Contenido cubierto en este artículo:
- Niveles de dificultad de rastreo por servicio de Naver (desde fácil hasta difícil)
- Métodos de bloqueo de cada servicio (por qué se bloquean, técnicamente)
- Soluciones prácticas que funcionan (ejemplos de códigos personalizados por servicio)
- API de Naver vs. Rastreo (cuándo usar qué)
Tabla de contenido
- Niveles de dificultad de rastreo por servicio de Naver
- Tecnología de bloqueo de bots de Naver
- Rastreo de Naver Shopping
- Rastreo de blogs de Naver
- Rastreo de Smart Store
- Rastreo de cafés de Naver
- Rastreo de Naver Place
- Resumen completo de la API oficial de Naver
- Resolver todo con un servicio de API de rastreo
- Preguntas frecuentes
1. Niveles de dificultad de rastreo por servicio de Naver
Naver tiene decenas de servicios bajo un solo dominio. Los niveles de dificultad de rastreo varían considerablemente.
| Servicio | Dominio | Dificultad | Método principal de bloqueo | Posible con requests |
|---|---|---|---|---|
| Búsqueda de Naver | search.naver.com | Limitación de tasa | △ (algunos) | |
| Blogs de Naver | blog.naver.com | Estructura de iframe | (posible evasión) | |
| Noticias de Naver | news.naver.com | Limitación de tasa | ||
| Compras de Naver | shopping.naver.com | Renderizado de JavaScript, API interna | △ (Análisis de API necesario) | |
| Naver Place | m.place.naver.com | JavaScript + API interna | △ (Análisis de API necesario) | |
| Cafés de Naver | cafe.naver.com | Requiere inicio de sesión, verificación de permisos | (en su mayoría) | |
| Smart Store | smartstore.naver.com | CAPTCHAs, Desafíos de JavaScript | ||
| Naver Pay | pay.naver.com | Inicio de sesión + token de seguridad |
Patrón clave: Los servicios relacionados con dinero (Smart Store, Pay) tienden a tener una seguridad más fuerte.
2. Tecnología de bloqueo de bots de Naver
A diferencia de Coupang que utiliza Akamai, Naver opera su propio sistema de bloqueo de bots desarrollado internamente. Debido a la irregularidad en los ciclos de actualización en comparación con soluciones externas, a veces es más estricto y otras veces se refuerza de repente.
Sistema de defensa de Naver
요청 수신
│
├─ Layer 1: robots.txt
│ └─ Googlebot 등 주요 크롤러 외 대부분 차단
│ └─ 실제 강제력은 없으나, 위반 시 법적 분쟁 불리
│
├─ Layer 2: Rate Limiting
│ └─ IP당 분당 요청 수 제한
│ └─ 초과 시 일시 차단 (보통 5~30분)
│
├─ Layer 3: JavaScript 렌더링 의존
│ └─ 핵심 데이터를 JS로 동적 로드 (쇼핑, 플레이스)
│ └─ SSR(서버 사이드 렌더링) 미적용 페이지가 많음
│
├─ Layer 4: 캡챠 (스마트스토어 중심)
│ └─ 의심스러운 접근에 네이버 자체 캡챠 표시
│ └─ 최근 발생 빈도 증가 추세
│
└─ Layer 5: 로그인/권한 체크 (카페)
└─ 회원 등급별 접근 제한
└─ 비회원에게 본문 차단
Comparación de niveles de bloqueo entre Coupang y Naver
| Criterio | Coupang | Naver |
|---|---|---|
| Solución de bloqueo de bots | Akamai Bot Manager (externo) | Desarrollo interno |
| Verificación de huella TLS | (Hash JA3/JA4) | (en su mayoría) |
| Desafío de JavaScript | (Aplicación completa) | △ (Varía por servicio) |
| Recopilación de datos de sensores | (Cookie _abck) | |
| CAPTCHAs | Presente | Ocasional en Smart Store |
| Acceso mediante requests | Bloqueo del 100% | Posible según el servicio |
| Dificultad general | (Promedio) |
Conclusión: En general, Naver es más fácil que Coupang, pero la dificultad varía según el servicio. El rastreo de blogs y Smart Store son problemas completamente diferentes.
3. Rastreo de Naver Shopping
Comprensión de la estructura
Naver Shopping está diseñado como una SPA (Aplicación de una sola página). La lista de productos que se ve en el navegador se carga después de que JavaScript llama a la API interna.
브라우저가 shopping.naver.com 접속
→ 빈 HTML 프레임 로드
→ JavaScript 실행
→ 내부 API 호출 (shopping.naver.com/api/...)
→ JSON 응답 수신
→ 상품 카드 렌더링
Por lo tanto, si solo se obtiene el HTML a través de requests, no habrá datos de productos. Hay dos formas de abordar esto.
Método 1: Llamar directamente a la API interna (más rápido y eficiente)
Desde la consola de desarrollador del navegador (F12 → Pestaña de red), se puede verificar la API que llama Naver Shopping y llamarla de la misma manera.
import requests
# 네이버 쇼핑 검색 내부 API
url = "https://shopping.naver.com/api/search"
params = {
"query": "에어팟",
"pagingIndex": 1,
"pagingSize": 40,
"sort": "rel" # rel=관련도, price_asc=낮은가격, review=리뷰많은
}
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ...",
"Referer": "https://shopping.naver.com/search/all?query=에어팟"
}
response = requests.get(url, params=params, headers=headers)
data = response.json()
for item in data["shoppingResult"]["products"]:
print(f"{item['productTitle']} - {item['price']}원 ({item['reviewCount']}건 리뷰)")
Ventajas: No es necesario el renderizado del navegador, es rápido, se recibe JSON directamente.
Precauciones:
- Los puntos finales/parámetros de la API interna pueden cambiar sin previo aviso de Naver.
- Si falta el encabezado Referer, se devuelve un código 403.
- Se puede bloquear la IP temporalmente por solicitudes excesivas (se recomienda un retraso de 1 a 3 segundos entre solicitudes).
- Se necesita confirmar la ruta real de la API a través de la consola de desarrollador para estar actualizado.
Método 2: Renderizado del navegador con Playwright
Cuando el análisis de la API interna es difícil o se necesitan filtros/clasificaciones complejos:
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page()
page.goto("https://shopping.naver.com/search/all?query=에어팟")
# 상품 목록이 렌더링될 때까지 대기
page.wait_for_selector('[class*="product_item"]', timeout=10000)
products = page.query_selector_all('[class*="product_item"]')
for product in products[:10]:
title_el = product.query_selector('[class*="product_title"]')
price_el = product.query_selector('[class*="price_num"]')
if title_el and price_el:
print(f"{title_el.inner_text()} - {price_el.inner_text()}")
browser.close()
Nota: La seguridad contra navegadores sin cabeza en Naver Shopping no es tan estricta como en Coupang (Akamai), por lo que a menudo funciona bien en el modo sin cabeza básico de Playwright. Sin embargo, puede haber bloqueos de IP al realizar solicitudes masivas.
Método 3: API de búsqueda de Naver Shopping (Oficial)
API oficial proporcionada de forma gratuita por el Centro de Desarrollo de Naver:
import requests
client_id = "YOUR_CLIENT_ID" # 네이버 개발자센터에서 발급
client_secret = "YOUR_CLIENT_SECRET"
url = "https://openapi.naver.com/v1/search/shop.json"
headers = {
"X-Naver-Client-Id": client_id,
"X-Naver-Client-Secret": client_secret
}
params = {
"query": "에어팟",
"display": 100, # 최대 100건
"start": 1, # 시작 위치 (최대 1000)
"sort": "sim" # sim=정확도, date=날짜, asc=가격오름, dsc=가격내림
}
response = requests.get(url, headers=headers, params=params)
data = response.json()
for item in data["items"]:
# HTML 태그 제거 필요 (title에 <b> 태그 포함)
import re
clean_title = re.sub('<[^<]+?>', '', item['title'])
print(f"{clean_title} - {item['lprice']}원 - {item['mallName']}")
Limitaciones de la API oficial:
- Límite de 25,000 solicitudes al día.
- Máximo de 1,000 para el parámetro start → No se pueden recuperar más de 1,000 elementos.
- No incluye especificaciones detalladas, revisiones completas, información del vendedor.
- No se puede recuperar la lista completa de productos por categoría.
- No hay información en tiempo real sobre inventario/envío.
→ Suficiente para comparaciones de precios simples o tendencias de palabras clave, pero insuficiente para análisis de datos avanzados.
4. Rastreo de blogs de Naver
Peculiaridad estructural: iframe
Los blogs de Naver, un servicio heredado que ha estado en funcionamiento desde 2003, mantienen una estructura basada en iframes.
blog.naver.com/username/포스트번호
└─ 외부 프레임 (헤더, 프로필, 카테고리)
└─ 내부 iframe (실제 글 내용)
└─ PostView.naver?blogId=xxx&logNo=yyy
Si se obtiene blog.naver.com/username/12345 a través de requests, solo se obtendrá el HTML del marco externo y no el contenido real del artículo. Es necesario llamar directamente a la URL dentro del iframe.
Solución: Acceso directo a la URL de PostView
import requests
from bs4 import BeautifulSoup
import re
blog_id = "example_blog"
post_no = "223456789"
# 방법 A: PostView URL 직접 접근 (가장 간단)
url = f"https://blog.naver.com/PostView.naver?blogId={blog_id}&logNo={post_no}"
headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ..."}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
# 스마트에디터 ONE (최신 에디터) 본문 추출
content = soup.select_one(".se-main-container")
if content:
text = content.get_text(separator="\n", strip=True)
print(text)
# 구 에디터 (이전 글들)
if not content:
content = soup.select_one("#postViewArea")
if content:
text = content.get_text(separator="\n", strip=True)
print(text)
# 방법 B: 메인 페이지에서 iframe URL 추출 후 접근
main_url = f"https://blog.naver.com/{blog_id}/{post_no}"
response = requests.get(main_url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
# iframe src에서 logNo 추출
iframe = soup.select_one("iframe#mainFrame")
if iframe:
iframe_src = iframe.get("src", "")
# iframe_src를 파싱하여 PostView URL 구성
print(f"iframe URL: https://blog.naver.com{iframe_src}")
Recopilación masiva desde los resultados de búsqueda de blogs
import requests
import time
client_id = "YOUR_CLIENT_ID"
client_secret = "YOUR_CLIENT_SECRET"
# 1단계: 검색 API로 블로그 URL 목록 수집
search_url = "https://openapi.naver.com/v1/search/blog.json"
headers = {
"X-Naver-Client-Id": client_id,
"X-Naver-Client-Secret": client_secret
}
params = {"query": "크롤링 자동화", "display": 100, "start": 1}
response = requests.get(search_url, headers=headers, params=params)
blog_urls = [item["link"] for item in response.json()["items"]]
# 2단계: 각 블로그 글 본문 수집
for url in blog_urls:
# blog.naver.com URL을 PostView URL로 변환
# (URL 파싱 로직 필요)
response = requests.get(url, headers={"User-Agent": "Mozilla/5.0 ..."})
soup = BeautifulSoup(response.text, "html.parser")
content = soup.select_one(".se-main-container")
if content:
print(content.get_text(strip=True)[:200])
time.sleep(2) # Rate limiting 방지
Precauciones
- Publicaciones privadas/solo para amigos: No se puede acceder sin la cookie de inicio de sesión.
- Limitación de tasa: Bloqueo temporal si se superan las 60-100 solicitudes por minuto (se recomienda un retraso de 1-2 segundos).
- URL de imagen: El CDN de Naver (postfiles.pstatic.net) verifica el Referer → Se necesita el encabezado
Referer: https://blog.naver.comal descargar imágenes directamente. - Versión del editor: La estructura HTML de Smart Editor ONE (
.se-main-container) y el editor antiguo (#postViewArea) son diferentes → Se necesita manejar ambos.
5. Rastreo de Smart Store
¿Por qué es tan difícil en Naver?
Smart Store es la plataforma de comercio electrónico de Naver que está directamente vinculada a las ventas, por lo que tiene una seguridad sólida.
- SPA completa: Toda la información del producto se renderiza con JavaScript, no hay datos en HTML.
- CAPTCHAs: Si se accede a múltiples páginas en poco tiempo, Naver muestra su propio CAPTCHA.
- URL dinámicas: Formato
smartstore.naver.com/{nombre de la tienda}/productos/{ID del producto}. - Frecuencia de cambios en la API: La estructura interna de la API cambia con frecuencia.
API interna de Smart Store
Smart Store también llama a una API REST interna. Se puede verificar desde la consola de desarrollador:
import requests
# 스마트스토어 상품 상세 API (내부 — 변경될 수 있음)
store_id = "store_channel_id" # 상점의 채널 ID
product_id = "12345678"
api_url = f"https://smartstore.naver.com/i/v1/stores/{store_id}/products/{product_id}"
headers = {
"User-Agent": "Mozilla/5.0 ...",
"Referer": f"https://smartstore.naver.com/"
}
response = requests.get(api_url, headers=headers)
# 주의: 이 API는 차단되는 경우가 많음
# 성공하면 상품명, 가격, 옵션, 리뷰 수 등 JSON 반환
Enfoque práctico
| Escala | Método recomendado | Tasa de éxito | Costo |
|---|---|---|---|
| Baja (decenas al día) | Playwright + retraso de 5-10 segundos | 70-90% | Gratis |
| Mediana (cientos al día) | Servicio de API de rastreo | 95%+ | $35/mes en adelante |
| Alta (miles al día o más) | Servicio de rastreo especializado | 99%+ | $99/mes en adelante |
# 소량 수집: Playwright 사용
from playwright.sync_api import sync_playwright
import time
with sync_playwright() as p:
browser = p.chromium.launch(headless=False) # headless=False 권장
page = browser.new_page()
url = "https://smartstore.naver.com/example_store/products/12345678"
page.goto(url)
page.wait_for_load_state("networkidle")
# 상품명
title = page.query_selector('._3StrMSMN5r') # 클래스명은 변경될 수 있음
# 가격
price = page.query_selector('._1LY7DqCnwR')
if title and price:
print(f"{title.inner_text()} - {price.inner_text()}")
time.sleep(5) # 캡챠 방지를 위한 딜레이
browser.close()
Importante: Los nombres de las clases CSS de Smart Store están ofuscados (hash), por lo que cambian con cada implementación. Primero, use selectores estables como
data-testidoaria-label.
6. Rastreo de cafés de Naver
Problema clave: inicio de sesión + permisos
La mayoría de las publicaciones en los cafés de Naver son exclusivas para miembros. Cuanto más popular sea el café, más estrictas serán las restricciones de nivel.
접근 권한 구조:
비회원 → 글 목록만 보임, 본문은 "카페 가입 후 이용" 메시지
가입 회원 → 일부 게시판만 접근 가능
등급 회원 → 전체 접근 가능 (활동 실적 필요)
Riesgos de la automatización del inicio de sesión
La automatización del inicio de sesión en Naver es técnicamente posible, pero presenta varios problemas:
- Módulo de seguridad de teclado: Encripta dinámicamente los valores de entrada al iniciar sesión en naver.com.
- Autenticación de nuevo dispositivo: Requiere autenticación de 2 pasos al iniciar sesión desde un entorno desconocido.
- Detección de comportamiento inusual: Si se detecta un patrón anormal después del inicio de sesión, la cuenta se suspende temporalmente.
- Violación de los términos de uso: La automatización del inicio de sesión infringe los términos de uso de Naver.
→ Existe el riesgo de suspensión permanente de la cuenta, por lo que no se recomienda.
Alternativas legales
| Método | Descripción | Restricciones |
|---|---|---|
| API de cafés de Naver | Requiere aprobación de acceso API por parte del administrador del café | Requiere cooperación del administrador |
| Inicio de sesión manual + recopilación automática | Iniciar sesión manualmente en el navegador y luego recopilar automáticamente con cookies | Requiere volver a iniciar sesión cuando expire la sesión |
| Feed RSS | Algunos tableros de café ofrecen RSS | Limitado a las últimas publicaciones, solo parte del contenido |
| Servicio de API de rastreo | Utilizar un servicio que admita el rastreo de cafés | De pago |
7. Rastreo de Naver Place
Naver Place (mapas) es una fuente de datos de negocios locales que incluye información de tiendas, reseñas, visitantes, etc.
Estructura
Naver Place se basa en la web móvil y carga datos a través de una API interna:
m.place.naver.com/restaurant/1234567890
→ JavaScript 로드
→ 내부 GraphQL API 호출
→ 가게 정보, 리뷰, 사진 등 렌더링
Uso de la API interna
import requests
# 네이버 플레이스 내부 API (변경될 수 있음)
place_id = "1234567890"
api_url = f"https://api.place.naver.com/graphql"
headers = {
"User-Agent": "Mozilla/5.0 ...",
"Referer": f"https://m.place.naver.com/restaurant/{place_id}",
"Content-Type": "application/json"
}
# GraphQL 쿼리 (실제 쿼리는 개발자도구에서 확인 필요)
query = {
"operationName": "getPlaceDetail",
"variables": {"id": place_id},
"query": "query getPlaceDetail($id: String!) { ... }"
}
response = requests.post(api_url, headers=headers, json=query)
# 성공 시: 가게명, 주소, 전화번호, 영업시간, 평점, 리뷰 수 등
Nota: La estructura de consulta GraphQL de Naver Place es compleja y cambia con frecuencia. Si se necesita una recopilación estable, se recomienda utilizar un servicio de API de rastreo.
8. Resumen completo de la API oficial de Naver
Revise primero las API proporcionadas por el Centro de Desarrollo de Naver (developers.naver.com). Es gratuito y estable.
APIs disponibles
| API | Límite diario | Datos principales | Precio | Emisión |
|---|---|---|---|---|
| Búsqueda (Shopping) | 25,000 solicitudes | Nombre del producto, precio más bajo, enlace a la tienda | Gratis | Inmediata |
| Búsqueda (Blogs) | 25,000 solicitudes | Título, resumen, URL | Gratis | Inmediata |
| Búsqueda (Noticias) | 25,000 solicitudes | Título, resumen, fuente | Gratis | Inmediata |
| Búsqueda (Cafés) | 25,000 solicitudes | Título, resumen, nombre del café | Gratis | Inmediata |
| Búsqueda (Imágenes) | 25,000 solicitudes | URL de la imagen, fuente | Gratis | Inmediata |
| Papago Traducción | 10,000 caracteres al día | Resultado de la traducción | Gratis | Inmediata |
| Data Lab (Tendencias) | 1,000 solicitudes | Tendencias de palabras clave (valores relativos) | Gratis | Inmediata |
| Mapa/Área | Por separado | Lugar, coordenadas, direcciones | Gratis/Pago | Evaluación |
Cuando es suficiente con la API
- Búsqueda de productos basada en palabras clave + comparación de precios más bajos
- Análisis de tendencias de palabras clave (Naver Data Lab)
- Monitoreo de noticias/blogs (Alertas de palabras clave)
- Investigación de mercado básica
Cuando la API no es suficiente → Se necesita rastreo
- Recopilación de especificaciones detalladas de productos, texto completo de reseñas
- Lista completa de productos por categoría (más de 1,000)
- Información detallada de tiendas individuales de Smart Store
- Información en tiempo real sobre inventario/envío
- Información detallada de tiendas de Naver Place (reseñas, visitantes)
- Recopilación de publicaciones de un café específico
9. Resolver todo con un servicio de API de rastreo
El rastreo de Naver involucra diferentes métodos de acceso para cada servicio, cambios irregulares en la API y CAPTCHAs, lo que requiere ajustes constantes en el código.
Al utilizar un servicio de API de rastreo, puede rastrear todos los servicios de Naver con una sola API.
Rastreo de Naver con una línea de API
import requests
API_KEY = "your-api-key"
# 네이버 쇼핑
response = requests.post(
"https://api.hashscraper.com/v1/scrape",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"url": "https://shopping.naver.com/search/all?query=에어팟", "format": "json"}
)
shopping_data = response.json()
# 스마트스토어 (캡챠 자동 처리)
response = requests.post(
"https://api.hashscraper.com/v1/scrape",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"url": "https://smartstore.naver.com/example/products/12345", "format": "json"}
)
store_data = response.json()
# 네이버 블로그
response = requests.post(
"https://api.hashscraper.com/v1/scrape",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"url": "https://blog.naver.com/example/223456789", "format": "json"}
)
blog_data = response.json()
Por qué un servicio de API:
- No es necesario preocuparse por los métodos de bloqueo de cada servicio.
- Procesamiento automático de CAPTCHAs (para Smart Store).
- Renderizado automático de JavaScript.
- Adaptación del servicio a cambios en la API interna.
- Recepción de datos limpios en formato JSON.
Rastreo de Naver con un agente de IA
También puede solicitar a la IA a través de MCP para obtener datos de Naver de forma natural:
Claude Desktop에서:
"네이버 쇼핑에서 '무선 이어폰' 검색해서
상위 20개 상품의 이름, 가격, 리뷰 수를 표로 정리해줘"
→ Claude가 HashScraper MCP를 호출하여 자동으로 수집 + 정리
Este método no requiere escribir código, lo que permite a los no desarrolladores utilizar los datos de Naver. Consulte la guía Cómo agregar funciones de rastreo a un agente de IA para obtener más información sobre la configuración.
10. Preguntas frecuentes
P: ¿Es legal el rastreo de Naver?
Recopilar información pública de páginas web públicas (como precios de productos, información de tiendas, etc.) generalmente no plantea problemas. Sin embargo, hay casos que pueden dar lugar a disputas legales:
- Recopilación automática en áreas que requieren inicio de sesión (como tableros de cafés privados).
- Rastreo a gran escala sin cumplir con robots.txt.
- Realización de solicitudes excesivas (decenas a cientos por segundo) que sobrecarguen el servidor.




.jpg?locale=es)