Raisons et solutions pour les blocages du crawling sur Naver

Cet article traite des raisons pour lesquelles le crawling sur Naver est bloqué et des solutions. Il aborde la difficulté du crawling par service sur Naver, les méthodes de blocage, les solutions et l'utilisation de l'API.

822
Raisons et solutions pour les blocages du crawling sur Naver

Naver n'est pas un seul site. Le niveau de blocage varie selon les services.

Temps de lecture : 14 minutes | En date de janvier 2026


Résumé

Naver est le plus grand portail en Corée, avec une part de marché d'environ 55% dans le secteur de la recherche. Il existe une grande variété de services à crawler sur Naver tels que Naver Shopping, les blogs, les cafés, les Smart Stores, etc.

Le problème est que chaque service a ses propres méthodes et niveaux de blocage. Les blogs sont relativement faciles à crawler, tandis que les Smart Stores nécessitent même la résolution de CAPTCHA. "Crawler sur Naver" n'est pas un seul problème, mais autant de problèmes que de services.

Contenu de cet article :
- Niveaux de difficulté du crawling par service sur Naver (du plus facile au plus difficile)
- Méthodes de blocage spécifiques à chaque service (pourquoi le blocage se produit, sur le plan technique)
- Solutions pratiques qui fonctionnent (exemples de code personnalisés par service)
- API Naver vs Crawling (quand utiliser quoi)


Table des matières

  1. Niveaux de difficulté du crawling par service sur Naver
  2. Technologie de blocage des bots de Naver
  3. Crawling sur Naver Shopping
  4. Crawling sur les blogs de Naver
  5. Crawling sur Smart Store
  6. Crawling sur les cafés de Naver
  7. Crawling sur Naver Place
  8. Récapitulatif complet de l'API officielle de Naver
  9. Résoudre tout en une fois avec un service d'API de crawling
  10. Questions fréquemment posées

1. Niveaux de difficulté du crawling par service sur Naver

Naver propose des dizaines de services sous un même domaine. Les niveaux de difficulté du crawling varient considérablement.

Service Domaine Difficulté Principale méthode de blocage Requests possibles
Recherche Naver search.naver.com Limitation du taux △ (partiel)
Blogs Naver blog.naver.com Structure en iframe (contournable)
Actualités Naver news.naver.com Limitation du taux
Shopping Naver shopping.naver.com Rendu JavaScript, API interne △ (analyse de l'API nécessaire)
Place Naver m.place.naver.com JavaScript + API interne △ (analyse de l'API nécessaire)
Cafés Naver cafe.naver.com Connexion requise, vérification des autorisations (majorité)
Smart Store smartstore.naver.com CAPTCHA, Défi JavaScript
Naver Pay pay.naver.com Connexion + jeton de sécurité

Motif clé : Les services liés à l'argent sont plus sécurisés.


2. Technologie de blocage des bots de Naver

Contrairement à Coupang qui utilise Akamai, Naver exploite son propre système de blocage des bots. La fréquence de mise à jour est irrégulière, ce qui signifie que la sécurité peut être renforcée de manière imprévisible d'un mois à l'autre.

Système de défense de Naver

요청 수신
  │
  ├─ Layer 1: robots.txt
  │    └─ Googlebot 등 주요 크롤러 외 대부분 차단
  │    └─ 실제 강제력은 없으나, 위반 시 법적 분쟁 불리
  │
  ├─ Layer 2: Rate Limiting
  │    └─ IP당 분당 요청 수 제한
  │    └─ 초과 시 일시 차단 (보통 5~30분)
  │
  ├─ Layer 3: JavaScript 렌더링 의존
  │    └─ 핵심 데이터를 JS로 동적 로드 (쇼핑, 플레이스)
  │    └─ SSR(서버 사이드 렌더링) 미적용 페이지가 많음
  │
  ├─ Layer 4: 캡챠 (스마트스토어 중심)
  │    └─ 의심스러운 접근에 네이버 자체 캡챠 표시
  │    └─ 최근 발생 빈도 증가 추세
  │
  └─ Layer 5: 로그인/권한 체크 (카페)
       └─ 회원 등급별 접근 제한
       └─ 비회원에게 본문 차단

Comparaison des niveaux de blocage entre Coupang et Naver

Critère Coupang Naver
Solution de blocage des bots Akamai Bot Manager (externe) Développement interne
Vérification des empreintes TLS (Hachage JA3/JA4) (majorité)
Défi JavaScript (appliqué partout) △ (varie selon le service)
Collecte de données de capteurs (cookie _abck)
CAPTCHA Fréquent Occasionnel sur Smart Store
Accès via requests 100% bloqué Possible selon le service
Niveau global de difficulté (moyenne)

Conclusion : Naver est généralement plus facile que Coupang, mais la difficulté varie considérablement selon le service. Crawler un blog et un Smart Store représentent des défis totalement différents.


3. Crawling sur Naver Shopping

Compréhension de la structure

Naver Shopping est conçu en SPA (Single Page Application). La liste des produits affichée dans le navigateur est obtenue en appelant une API interne après le chargement de la page via JavaScript.

브라우저가 shopping.naver.com 접속
  → 빈 HTML 프레임 로드
  → JavaScript 실행
  → 내부 API 호출 (shopping.naver.com/api/...)
  → JSON 응답 수신
  → 상품 카드 렌더링

Ainsi, si vous obtenez uniquement le HTML via requests, les données des produits ne seront pas présentes. Il existe deux méthodes.

Méthode 1 : Appel direct à l'API interne (la plus rapide et efficace)

Identifiez les appels API effectués par Naver Shopping dans l'onglet Réseau de l'inspecteur du navigateur et effectuez les mêmes appels.

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']}건 리뷰)")

Avantages : Pas besoin de rendre dans le navigateur, rapide, réception directe de JSON
Remarques :
- Les points de terminaison/paramètres de l'API interne peuvent être modifiés par Naver sans préavis
- Un en-tête Referer manquant entraîne un code 403
- Un blocage IP temporaire en cas de demandes excessives (recommandation de délai de 1 à 3 secondes entre les demandes)
- Vérifiez régulièrement les chemins d'API réels dans l'inspecteur du développeur pour les dernières informations

Méthode 2 : Rendu du navigateur avec Playwright

Si l'analyse de l'API interne est complexe ou si des filtres/tris complexes sont nécessaires :

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()

Remarque : Le blocage des navigateurs headless sur Naver Shopping n'est pas aussi strict que sur Coupang (Akamai), donc le mode headless de base de Playwright fonctionne souvent. Cependant, un blocage IP peut survenir en cas de demandes massives.

Méthode 3 : API de recherche Naver Shopping (officielle)

API officielle gratuite fournie par le centre des développeurs 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']}")

Limitations de l'API officielle :
- Limite de 25 000 requêtes par jour
- Paramètre start limité à 1 000 → Impossible de récupérer plus de 1 000 éléments
- Ne comprend pas les spécifications détaillées, les avis complets, les informations sur le vendeur
- Impossible de récupérer la liste complète des produits par catégorie
- Pas d'informations en temps réel sur les stocks/livraisons

→ Suffisant pour des comparaisons de prix simples ou des tendances de mots-clés, mais insuffisant pour une analyse de données approfondie.


4. Crawling sur les blogs de Naver

Particularité structurelle : iframe

Les blogs Naver, un service hérité en fonctionnement depuis 2003, conservent une structure basée sur les iframes.

blog.naver.com/username/포스트번호
  └─ 외부 프레임 (헤더, 프로필, 카테고리)
       └─ 내부 iframe (실제 글 내용)
            └─ PostView.naver?blogId=xxx&logNo=yyy

Si vous récupérez blog.naver.com/username/12345 via requests, vous obtiendrez uniquement le HTML du cadre externe, sans le contenu réel des articles. Vous devez appeler directement l'URL à l'intérieur de l'iframe.

Solution : Accès direct à l'URL 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}")

Collecte en masse à partir des résultats de recherche 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 방지

Points à prendre en compte

  • Articles privés/amis uniquement : Impossible d'y accéder sans cookie de connexion
  • Limitation du taux : Blocage temporaire en cas de 60 à 100 demandes par minute (recommandation de délai de 1 à 2 secondes entre les demandes)
  • URL des images : Le CDN de Naver (postfiles.pstatic.net) vérifie le Referer → Lors du téléchargement direct d'images, l'en-tête Referer: https://blog.naver.com est nécessaire
  • Version de l'éditeur : Les structures HTML du Smart Editor ONE (.se-main-container) et de l'ancien éditeur (#postViewArea) diffèrent → Les deux doivent être traités

5. Crawling sur Smart Store

Pourquoi est-ce le plus difficile sur Naver

Smart Store est la plateforme d'e-commerce de Naver, directement liée aux ventes, ce qui la rend très sécurisée.

  • SPA complet : Toutes les informations sur les produits sont rendues en JavaScript — Aucune donnée dans le HTML
  • CAPTCHA : Affichage du CAPTCHA de Naver en cas d'accès à de nombreuses pages en peu de temps
  • URL dynamique : Format smartstore.naver.com/{nom du magasin}/products/{ID du produit}
  • Fréquence de changement de l'API : La structure interne de l'API change fréquemment

API interne de Smart Store

Smart Store effectue également des appels API REST internes. Vous pouvez les trouver dans l'inspecteur du développeur :

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 반환

Approche pratique

Échelle Méthode recommandée Taux de réussite Coût
Faible (dizaines par jour) Playwright + délai de 5 à 10 secondes 70 à 90 % Gratuit
Moyenne (centaines par jour) Service d'API de crawling 95 % et plus 35 $/mois~
Grande (milliers par jour et plus) Service de crawling professionnel 99 % et plus 99 $/mois~
# 소량 수집: 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()

Important : Les noms de classe CSS de Smart Store sont obscurcis (hachés) et changent à chaque déploiement. Utilisez d'abord des sélecteurs stables comme data-testid ou aria-label.


6. Crawling sur les cafés de Naver

Problème clé : Connexion + Autorisation

La plupart des articles dans les cafés Naver sont réservés aux membres. Les cafés populaires ont des restrictions strictes en matière de classement.

접근 권한 구조:
  비회원  → 글 목록만 보임, 본문은 "카페 가입 후 이용" 메시지
  가입 회원 → 일부 게시판만 접근 가능
  등급 회원 → 전체 접근 가능 (활동 실적 필요)

Risques de l'automatisation de la connexion

L'automatisation de la connexion Naver est techniquement possible, mais comporte plusieurs problèmes :

  • Module de sécurité du clavier : Cryptage dynamique des valeurs d'entrée lors de la connexion à naver.com
  • Authentification du nouvel appareil : Demande d'authentification à deux facteurs lors de la connexion à partir d'un nouvel environnement
  • Détection de comportement suspect : Suspension temporaire du compte en cas de détection de motifs anormaux après la connexion
  • Violation des conditions d'utilisation : L'automatisation de la connexion enfreint les conditions d'utilisation de Naver

→ Risque de suspension permanente du compte, donc non recommandé.

Alternatives légales

Méthode Description Limitation
API des cafés Naver Approbation de l'accès API par l'administrateur du café Collaboration de l'administrateur requise
Connexion manuelle + collecte automatique Connexion manuelle dans le navigateur suivie de la collecte automatique via les cookies Reconnexion nécessaire en cas d'expiration de la session
Flux RSS Certains forums de café offrent des flux RSS Limité aux derniers articles, seulement une partie du contenu
Service d'API de crawling Utilisation d'un service de support pour le crawling de cafés Payant

7. Crawling sur Naver Place

Naver Place (cartes) est une mine d'informations sur les entreprises locales, les avis, le nombre de visiteurs, etc.

Structure

Naver Place est basé sur le web mobile et charge les données via une API interne :

m.place.naver.com/restaurant/1234567890
  → JavaScript 로드
  → 내부 GraphQL API 호출
  → 가게 정보, 리뷰, 사진 등 렌더링

Utilisation de l'API interne

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)
# 성공 시: 가게명, 주소, 전화번호, 영업시간, 평점, 리뷰 수 등

Remarque : La structure de requête GraphQL de Naver Place est complexe et change fréquemment. Si vous avez besoin d'une collecte stable, il est recommandé d'utiliser un service d'API de crawling.


8. Récapitulatif complet de l'API officielle de Naver

Consultez d'abord les API fournies par le centre des développeurs de Naver. Elles sont gratuites et fiables.

API disponibles

API Limite quotidienne Données principales Prix Attribution
Recherche (Shopping) 25 000 requêtes Nom du produit, prix le plus bas, lien vers le magasin Gratuit Immédiat
Recherche (Blogs) 25 000 requêtes Titre, résumé, URL Gratuit Immédiat
Recherche (Actualités) 25 000 requêtes Titre, résumé, source Gratuit Immédiat
Recherche (Cafés) 25 000 requêtes Titre, résumé, nom du café Gratuit Immédiat
Recherche (Images) 25 000 requêtes URL de l'image, source Gratuit Immédiat
Papago Traduction 10 000 caractères par jour Résultat de la traduction Gratuit Immédiat
Data Lab (Tendances) 1 000 requêtes Tendances des mots-clés (valeurs relatives) Gratuit Immédiat
Cartes/Régions Variable Lieu, coordonnées, itinéraire Gratuit/Payant Évaluation

Cas d'utilisation des API

  • Recherche de produits basée sur des mots-clés + comparaison des prix
  • Analyse des tendances des mots-clés (Naver Data Lab)
  • Surveillance des actualités/blogs (alertes de mots-clés)
  • Recherche de marché de base

Si les API ne suffisent pas → Crawling nécessaire

  • Collecte de spécifications détaillées de produits, de textes d'avis complets
  • Liste complète des produits par catégorie (plus de 1 000 éléments)
  • Informations détaillées sur les magasins individuels de Smart Store
  • Informations en temps réel sur les stocks/livraisons
  • Informations détaillées sur les entreprises de Naver Place (avis, nombre de visiteurs)
  • Collecte de publications spécifiques dans un café

9. Résoudre tout en une fois avec un service d'API de crawling

Avec les différentes méthodes de blocage des services de Naver, les changements d'API imprévisibles et même les CAPTCHA, il est nécessaire d'adapter constamment le code.

En utilisant un service d'API de crawling, vous pouvez crawler tous les services de Naver avec une seule API.

Crawler Naver en une ligne avec une 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()

Pourquoi un service d'API :
- Pas besoin de se soucier des méthodes de blocage par service
- Gestion automatique des CAPTCHA (pour Smart Store)
- Rendu JavaScript automatique
- Adaptation du service aux changements internes de l'API
- Réception de données propres au format JSON

Crawler Naver avec un agent IA

Vous pouvez également demander à un agent IA de crawler via MCP :

Claude Desktop에서:

"네이버 쇼핑에서 '무선 이어폰' 검색해서 
 상위 20개 상품의 이름, 가격, 리뷰 수를 표로 정리해줘"

→ Claude가 HashScraper MCP를 호출하여 자동으로 수집 + 정리

Cette méthode ne nécessite pas d'écriture de code, ce qui permet aux non-développeurs d'utiliser les données de Naver. Consultez le guide Ajouter une fonction de crawling à un agent IA pour plus d'informations sur la configuration.


10. Questions fréquemment posées

Q : Le crawling sur Naver est-il légal ?

Collecter des informations publiques sur des pages Web publiques (prix des produits, informations sur les entreprises, etc.) est généralement autorisé. Cependant, les cas suivants peuvent entraîner des litiges juridiques :
- Collecte automat

Comments

Add Comment

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

Continuer la lecture

Get notified of new posts

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

Your email will only be used for new post notifications.