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
- Niveaux de difficulté du crawling par service sur Naver
- Technologie de blocage des bots de Naver
- Crawling sur Naver Shopping
- Crawling sur les blogs de Naver
- Crawling sur Smart Store
- Crawling sur les cafés de Naver
- Crawling sur Naver Place
- Récapitulatif complet de l'API officielle de Naver
- Résoudre tout en une fois avec un service d'API de crawling
- 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.comest 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-testidouaria-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




.jpg?locale=fr)