Razones y soluciones para el bloqueo del crawling en Naver

Este artículo trata sobre las razones y soluciones para el bloqueo del crawling en Naver. Cubre la dificultad del crawling por servicio en Naver, los métodos de bloqueo, soluciones y el uso de la API.

821
Razones y soluciones para el bloqueo del crawling en Naver

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

  1. Niveles de dificultad de rastreo por servicio de Naver
  2. Tecnología de bloqueo de bots de Naver
  3. Rastreo de Naver Shopping
  4. Rastreo de blogs de Naver
  5. Rastreo de Smart Store
  6. Rastreo de cafés de Naver
  7. Rastreo de Naver Place
  8. Resumen completo de la API oficial de Naver
  9. Resolver todo con un servicio de API de rastreo
  10. 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.com al 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-testid o aria-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.

P

Comments

Add Comment

Your email won't be published and will only be used for reply notifications.

Sigue leyendo

Get notified of new posts

We'll email you when 해시스크래퍼 기술 블로그 publishes new content.

Your email will only be used for new post notifications.