Guide de crawl de données sur les prix réels de l'immobilier - Collecte automatique des prix des appartements et des bureaux

Guide sur les méthodes de collecte des données sur les prix réels de l'immobilier, les API publiques, le crawling et les services spécialisés. Fourniture d'informations par le ministère de l'Aménagement du Territoire et des Transports, Naver Real Estate, Zigbang et l'Institut immobilier coréen.

13
Guide de crawl de données sur les prix réels de l'immobilier - Collecte automatique des prix des appartements et des bureaux

"Cet appartement, est-ce le bon moment pour l'acheter?"

Pour répondre à cette question, vous avez finalement besoin de données. Il est nécessaire d'évaluer les tendances des prix réels, les prix du marché environnant, le taux de location, les variations du volume des transactions - tout cela doit être évalué en chiffres, pas en impressions. Les investisseurs immobiliers, les startups PropTech, les agences immobilières, les chercheurs universitaires se posent tous la même question : "Comment collecter automatiquement ces données?"

Dans cet article, nous abordons trois méthodes pour collecter des données sur les prix réels de l'immobilier :

  1. API publique - API publique des prix réels du ministère de la terre, des infrastructures et des transports (gratuite, la plus sûre)
  2. Web scraping direct - Web scraping de sites web tels que Naver Real Estate (difficulté technique élevée)
  3. Service professionnel - Collecte automatique en utilisant un service de scraping (le plus pratique)

Nous résumons les avantages et les inconvénients de chaque méthode, le code Python pratique, le dépannage, ainsi que les considérations légales.


Table des matières

  1. Où trouver des données immobilières?
  2. Méthode 1: Utilisation de l'API publique du ministère de la terre, des infrastructures et des transports
  3. Méthode 2: Web scraping de Naver Real Estate
  4. Méthode 3: Utilisation d'un service de scraping professionnel
  5. Utilisation des données collectées - Analyse et visualisation
  6. Dépannage - Problèmes courants et solutions
  7. Considérations légales
  8. Questions fréquentes (FAQ)

Où trouver des données immobilières?

Les données de transactions immobilières en Corée du Sud sont fournies par plusieurs sources. La source appropriée varie en fonction de l'objectif.

1. Système de données de transactions réelles du ministère de la terre, des infrastructures et des transports

URL: rt.molit.go.kr

Il s'agit des données officielles de transactions réelles exploitées par le ministère de la terre, des infrastructures et des transports. Lorsqu'une transaction immobilière est déclarée, elle est rendue publique via ce système.

Données fournies:
- Ventes et locations mensuelles d'appartements, de maisons en rangée/multifamiliales et de maisons individuelles
- Ventes et locations d'appartements en copropriété
- Transactions de terrains, de droits de préemption/occupation, de biens commerciaux/bureaux
- Date de la transaction, montant de la transaction, superficie, nombre d'étages, année de construction, etc.

API du portail des données publiques:
Vous pouvez utiliser l'API des transactions réelles du ministère de la terre, des infrastructures et des transports gratuitement sur le portail des données publiques(data.go.kr). Une fois que vous avez obtenu une clé API, vous pouvez collecter automatiquement les données via la programmation.

Avantages: Données officielles, gratuites, aucun risque légal
Inconvénients: Fournit uniquement les transactions réelles (pas d'informations sur les prix du marché ou les biens à vendre), délai de mise à jour

2. Naver Real Estate

URL: land.naver.com

Il fournit non seulement des données sur les transactions réelles, mais également des informations sur les biens à vendre, les prix du marché, les écoles, les infrastructures environnantes, etc. Les informations supplémentaires les plus riches sont disponibles.

Données fournies:
- Prix réels (basés sur les données du ministère de la terre, des infrastructures et des transports)
- Informations sur les biens actuels (prix demandé, type de bien)
- Informations sur les prix du marché (prix estimé par KB, estimation interne de Naver)
- Informations sur les complexes (nombre d'unités, parking, frais de gestion, etc.)
- Informations sur les écoles et les installations environnantes

Avantages: Données riches, convivialité pour les utilisateurs
Inconvénients: Difficulté élevée de web scraping, restrictions des conditions d'utilisation

3. Zigbang / Dabang

URL: zigbang.com / dabangapp.com

Ils se spécialisent dans les informations sur les petits logements tels que les studios et les deux pièces. En particulier, ils disposent de données abondantes sur le marché de la location mensuelle.

Avantages: Données abondantes sur les petits logements/locations mensuelles
Inconvénients: Moins de données sur les ventes d'appartements par rapport à Naver Real Estate

4. Korea Real Estate Information Center (anciennement Korea Appraisal Board)

URL: reb.or.kr

Il fournit des données statistiques telles que les tendances des prix immobiliers, le taux de conversion des ventes/locations, les indices de prix de vente/location, etc. Vous pouvez accéder à diverses statistiques via le système d'information immobilière R-ONE.

Avantages: Statistiques officielles, fourniture d'indices de prix
Inconvénients: Agrégation statistique au lieu de données de transactions individuelles


Méthode 1: Utilisation de l'API publique du ministère de la terre, des infrastructures et des transports

Il s'agit de la méthode la plus orthodoxe et la plus stable. Étant des données publiques, il n'y a aucun risque légal.

Étape 1: Obtention de la clé API

  1. Inscrivez-vous sur le portail des données publiques
  2. Recherchez "Données réelles de transactions d'appartements du ministère de la terre, des infrastructures et des transports"
  3. Cliquez sur "Demande d'utilisation" → Entrez l'objectif d'utilisation
  4. Obtenez la clé API (généralement en quelques heures à un jour)

Conseil: Deux types de clés API sont délivrées : une clé encodée (Encoding) et une clé décodée (Decoding). Il est plus pratique d'utiliser la clé décodée en Python. L'utilisation de la clé encodée peut entraîner des erreurs dues à un double encodage par la bibliothèque requests.

Principaux endpoints API

Nom de l'API Description Code de service
Données réelles de transactions d'appartements Prix réels des appartements getRTMSDataSvcAptTrade
Données de location d'appartements Prix de location/cession-bail d'appartements getRTMSDataSvcAptRent
Données réelles de transactions de maisons en rangée/multifamiliales Prix de vente de villas/maisons en rangée getRTMSDataSvcRHTrade
Données réelles de transactions d'officetels Prix de vente d'officetels getRTMSDataSvcOffiTrade
Données réelles de transactions de maisons individuelles Prix de vente de maisons individuelles getRTMSDataSvcSHTrade
Données réelles de transactions de terrains Prix de vente de terrains getRTMSDataSvcLandTrade

Exemple de code Python - Recherche des prix réels des appartements

import requests
import xml.etree.ElementTree as ET
import pandas as pd

# API 설정 — 디코딩된 키를 사용하세요
SERVICE_KEY = "발급받은_디코딩_API_키"
BASE_URL = "http://openapi.molit.go.kr/OpenAPI_ToolInstall/service/rest/RTMSOBJSvc/getRTMSDataSvcAptTrade"

def get_apt_trade(lawd_cd: str, deal_ymd: str) -> pd.DataFrame:
    """
    아파트 매매 실거래가를 조회합니다.

    Args:
        lawd_cd: 법정동 앞 5자리 코드 (예: "11680" = 서울 강남구)
        deal_ymd: 계약년월 (예: "202601")

    Returns:
        거래 데이터가 담긴 DataFrame
    """
    params = {
        "serviceKey": SERVICE_KEY,
        "LAWD_CD": lawd_cd,
        "DEAL_YMD": deal_ymd,
        "numOfRows": "9999",
        "pageNo": "1"
    }

    response = requests.get(BASE_URL, params=params, timeout=30)
    response.raise_for_status()

    root = ET.fromstring(response.text)

    # 에러 체크
    result_code = root.find(".//resultCode")
    if result_code is not None and result_code.text != "00":
        result_msg = root.find(".//resultMsg")
        raise Exception(f"API 오류: {result_msg.text if result_msg is not None else 'Unknown'}")

    items = root.findall(".//item")
    if not items:
        return pd.DataFrame()

    data = []
    for item in items:
        row = {}
        for child in item:
            text = child.text.strip() if child.text else ""
            row[child.tag] = text
        data.append(row)

    return pd.DataFrame(data)


# 사용 예시: 서울 강남구(11680) 2026년 1월 거래 조회
df = get_apt_trade("11680", "202601")
print(f"조회된 거래 수: {len(df)}")
if not df.empty:
    # 거래금액 정수 변환 (쉼표와 공백 제거)
    df["거래금액_만원"] = df["거래금액"].str.replace(",", "").str.strip().astype(int)
    print(df[["거래금액_만원", "아파트", "전용면적", ""]].head(10))

Collecte de données annuelles pour tous les arrondissements de Séoul

import time

# 서울시 구별 법정동 앞 5자리 코드
SEOUL_CODES = {
    "강남구": "11680", "서초구": "11650", "송파구": "11710",
    "강동구": "11740", "마포구": "11440", "용산구": "11170",
    "성동구": "11200", "광진구": "11215", "중구": "11140",
    "종로구": "11110", "영등포구": "11560", "동작구": "11590",
    "관악구": "11620", "강서구": "11500", "양천구": "11470",
    "구로구": "11530", "금천구": "11545", "노원구": "11350",
    "도봉구": "11320", "강북구": "11305", "성북구": "11290",
    "동대문구": "11230", "중랑구": "11260", "은평구": "11380",
    "서대문구": "11410"
}

def collect_seoul_yearly(year: int) -> pd.DataFrame:
    """서울시 전체 구의 1년치 아파트 매매 데이터를 수집합니다."""
    all_data = []
    months = [f"{year}{m:02d}" for m in range(1, 13)]
    total = len(SEOUL_CODES) * len(months)
    count = 0

    for gu_name, code in SEOUL_CODES.items():
        for month in months:
            count += 1
            try:
                df = get_apt_trade(code, month)
                if not df.empty:
                    df[""] = gu_name
                    all_data.append(df)
                print(f"[{count}/{total}]  {gu_name} {month}: {len(df)}")
            except Exception as e:
                print(f"[{count}/{total}]  {gu_name} {month}: {e}")
            time.sleep(0.3)  # API 호출 간격

    if all_data:
        result = pd.concat(all_data, ignore_index=True)
        return result
    return pd.DataFrame()

# 2025년 전체 데이터 수집
result = collect_seoul_yearly(2025)
result.to_csv("서울_아파트_실거래가_2025.csv", index=False, encoding="utf-8-sig")
print(f"\n{len(result)}건 수집 완료!")

Limites de l'API publique

L'API publique est stable mais comporte des limitations :

Limite Description
Portée des données Fournit uniquement les prix réels et les informations de base. Pas d'informations supplémentaires telles que les prix du marché, les biens à vendre, les écoles, etc.
Délai de mise à jour Les données ne sont pas en temps réel mais sont mises à jour quelques jours à quelques semaines après la déclaration
Limitation des appels Limite du nombre d'appels API par jour (généralement 1 000 appels/jour, extensible sur demande)
Format des données La réponse est généralement en format XML (certains API prennent également en charge JSON)
Code régional Vous devez gérer séparément les codes de district légaux
Changement d'URL de l'API L'URL de l'API du portail des données publiques change de manière intermittente

Méthode 2: Web scraping de Naver Real Estate

Lorsque des données plus riches sont nécessaires par rapport à l'API publique, le web scraping de Naver Real Estate peut être envisagé. Vous pouvez collecter des données telles que les prix du marché, les biens à vendre, les informations sur les complexes, etc., qui ne sont pas fournies par l'API publique.

API interne de Naver Real Estate

Naver Real Estate utilise une API interne pour rendre les données. Vous pouvez vérifier ces appels d'API dans les outils de développement du navigateur (F12 → Onglet Réseau).

Principaux endpoints (sujets à modification) :

# 단지 기본 정보
GET https://fin.land.naver.com/complexes/{complexNo}

# 단지 매물 목록
GET https://fin.land.naver.com/complexes/{complexNo}/articles

# 단지 실거래가
GET https://fin.land.naver.com/complexes/{complexNo}/real-estates/trades

# 지역별 단지 목록
GET https://fin.land.naver.com/front-api/v1/complex/marker

Exemple de code Python - Informations sur les complexes de Naver Real Estate

import requests
import json
import time

def get_naver_complex(complex_no: str) -> dict | None:
    """
    네이버 부동산에서 아파트 단지 정보를 조회합니다.

    주의: 네이버 내부 API는 수시로 변경될 수 있습니다.
    이 코드가 동작하지 않으면 브라우저 개발자 도구에서
    최신 API 엔드포인트를 확인하세요.
    """
    url = f"https://fin.land.naver.com/complexes/{complex_no}"
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                       "AppleWebKit/537.36 (KHTML, like Gecko) "
                       "Chrome/120.0.0.0 Safari/537.36",
        "Referer": "https://land.naver.com/",
        "Accept": "application/json"
    }

    try:
        response = requests.get(url, headers=headers, timeout=10)
        if response.status_code == 200:
            return response.json()
        else:
            print(f"HTTP {response.status_code}: {complex_no}")
            return None
    except requests.exceptions.JSONDecodeError:
        # HTML이 반환된 경우 (API 변경 가능성)
        print(f"JSON 파싱 실패 — API 엔드포인트가 변경되었을 수 있습니다")
        return None
    except requests.exceptions.RequestException as e:
        print(f"요청 실패: {e}")
        return None

Problèmes pratiques rencontrés lors du web scraping

Le web scraping de Naver Real Estate peut sembler simple en théorie, mais en pratique, il nécessite une maintenance continue :

  1. Changement de l'endpoint de l'API : Naver modifie fréquemment les URL de l'API interne. Ce qui fonctionnait hier peut ne plus fonctionner aujourd'hui.
  2. Token d'authentification : Certaines données nécessitent un jeton de session ou une authentification distincte, nécessitant une logique de renouvellement du jeton.
  3. Blocage IP : Un grand nombre de requêtes en peu de temps peut entraîner un blocage de l'IP. Vous pourriez avoir besoin de rotation de proxy.
  4. Rendu JavaScript : Certaines pages utilisent un rendu côté client plutôt que côté serveur, nécessitant des outils d'automatisation du navigateur comme Selenium ou Playwright.
  5. Conditions d'utilisation : Les conditions d'utilisation de Naver interdisent la collecte automatisée de données. Consultez un article séparé pour plus de détails sur les problèmes juridiques liés au web scraping.

Méthode 3: Utilisation d'un service de scraping professionnel

Si vous voulez dépasser les limites de l'API publique tout en évitant la charge de maintenance du web scraping direct, l'utilisation d'un service de scraping professionnel est un choix réaliste.

Comparaison des trois méthodes

Élément API publique Web scraping direct Service professionnel
Configuration initiale Quelques jours De quelques semaines à quelques mois Immédiat
Portée des données Seulement les transactions réelles Prix du marché + biens à vendre + informations supplémentaires Prix du marché + biens à vendre + informations supplémentaires
Maintenance Presque inexistante Élevée (adaptation aux changements de l'API) Gérée par le service
Risque légal Aucun Présent Géré par le service
Coût Gratuit Coût de développement/exploitation Frais de service
Risque de blocage IP Aucun Élevé Aucun
Qualité des données Élevée (données officielles) Variable Élevée
Extensibilité Limitée Mise en œuvre directe nécessaire Élevée

Collecte de données immobilières avec Hashscraper

Hashscraper a une grande expérience dans la collecte de données immobilières :

  • Données de Naver Real Estate : Collecte automatique des listes de biens par région/type, prix, superficie, étages, informations sur les complexes
  • Collecte intégrée de transactions réelles : Fournit des appels d'API complexes de manière simple
  • Surveillance des fluctuations des prix du marché : Suivi régulier des changements de prix pour fournir des alertes
  • Intégration Excel/API : Téléchargez les données collectées sous forme d'Excel ou intégrez-les dans des systèmes existants via une API REST

Si vous créez votre propre scraper, vous devrez consacrer du temps à l'adaptation aux changements de l'API, à la gestion du blocage IP et au nettoyage des données. En utilisant un service professionnel, vous pouvez vous concentrer uniquement sur l'analyse des données.

Besoin de collecter des données immobilières? Hashscraper peut collecter des données de diverses plateformes immobilières comme Naver Real Estate, Zigbang, Dabang sans risque de blocage IP. Demandez une consultation gratuite.


Utilisation des données collectées - Analyse et visualisation

Une fois les données collectées, il est temps d'en tirer de la valeur par l'analyse.

Analyse de base : Tendances des prix par arrondissement

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib

# 한글 폰트 설정
matplotlib.rcParams['font.family'] = 'AppleGothic'  # macOS
# matplotlib.rcParams['font.family'] = 'Malgun Gothic'  # Windows
matplotlib.rcParams['axes.unicode_minus'] = False

# 데이터 로드 및 전처리
df = pd.read_csv("서울_아파트_실거래가_2025.csv")
df["거래금액_만원"] = (
    df["거래금액"].astype(str).str.replace(",", "").str.strip().astype(int)
)
df["거래월"] = df[""].astype(str) + "-" + df[""].astype(str).str.zfill(2)

# 구별 월평균 매매가
monthly = df.groupby(["", "거래월"])["거래금액_만원"].mean().reset_index()

# 강남 3구 비교 그래프
fig, ax = plt.subplots(figsize=(12, 6))
for gu in ["강남구", "서초구", "송파구"]:
    data = monthly[monthly[""] == gu].sort_values("거래월")
    ax.plot(data["거래월"], data["거래금액_만원"] / 10000, marker="o", label=gu)

ax.set_title("강남 3구 아파트 평균 매매가 추이 (2025)", fontsize=14)
ax.set_xlabel("거래월")
ax.set_ylabel("평균 매매가 (억 원)")
ax.legend()
ax.grid(True, alpha=0.3)
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig("강남3구_매매가_추이.png", dpi=150)
plt.show()

Analyse avancée : Calcul du taux de location

Le taux de location (loyer mensuel ÷ prix de vente × 100) est un indicateur clé dans l'investissement immobilier. Un taux de location élevé rend l'investissement à écart attrayant, tandis qu'un taux faible peut indiquer un marché de vente surchauffé.

def analyze_jeonse_rate(trade_file: str, rent_file: str, gu: str) -> pd.DataFrame:
    """
    특정 구의 아파트별 전세가율을 계산합니다.
    전세가율 = 전세 보증금 / 매매가 × 100
    """
    trade = pd.read_csv(trade_file)
    rent = pd.read_csv(rent_file)

    # 해당 구 필터링
    trade = trade[trade[""] == gu].copy()
    rent = rent[rent[""] == gu].copy()

    # 금액 정수 변환
    trade["매매가"] = trade["거래금액"].astype(str).str.replace(",", "").str.strip().astype(int)
    rent["보증금"] = rent["보증금액"].astype(str).str.replace(",", "").str.strip().astype(int)

    # 전세만 필터링 (월세 제외: 월세금액이 0인 경우)
    rent = rent[rent["월세금액"].astype(str).str.strip().replace("", "0").astype(int) == 0]

    # 아파트별 평균가
    avg_trade = trade.groupby("아파트")["매매가"].mean()
    avg_rent = rent.groupby("아파트")["보증금"].mean()

    # 전세가율 계산
    common = avg_trade.index.intersection(avg_rent.index)
    rates = pd.DataFrame({
        "아파트": common,
        "평균매매가_만원": avg_trade[common].values,
        "평균전세가_만원": avg_rent[common].values,
    })
    rates["전세가율"] = (rates["평균전세가_만원"] / rates["평균매매가_만원"] * 100).round(1)
    rates = rates.sort_values("전세가율", ascending=False)

    return rates

# 강남구 전세가율 분석
rates = analyze_jeonse_rate(
    "서울_아파트_매매_2025.csv",
    "서울_아파트_전세_2025.csv",
    "강남구"
)
print(rates.head(20))

Exemples d'utilisation des données

Utilisateur Objectif d'utilisation Données nécessaires
Investisseur individuel Détermination du moment d'achat, sélection de la région d'investissement Tendances des prix réels, taux de location, volume des transactions
Startups PropTech Modèle de prévision des prix, évaluation automatique des prix du marché Grandes quantités de prix réels, prix du marché, informations sur les complexes
Agences immobilières Comparaison des biens, matériel de consultation client Biens actuels, prix réels, prix du marché
Recherche universitaire Analyse des facteurs déterminants des prix des logements Prix réels + données démographiques/économiques
Institutions financières Évaluation des garanties, gestion des risques Prix du marché, prix réels, indices de prix

Dépannage - Problèmes courants et solutions

Liés à l'API publique

Problème 1 : Erreur "SERVICE_KEY_IS_NOT_REGISTERED_ERROR"
→ Vous utilisez une clé encodée et requests l'a encodée à nouveau. Utilisez la clé décodée.

Problème 2 : Erreur "LIMITED_NUMBER_OF_SERVICE_REQUESTS_EXCEEDS_ERROR"
→ Vous avez dépassé la limite d'appels quotidiens. Demandez une augmentation du trafic sur le portail des données publiques ou réessayez le lendemain.

Problème 3 : Aucune donnée renvoyée
→ Vérifiez si le code régional (LAWD_CD) est correct. Utilisez uniquement les 5 premiers chiffres du code de district légal. Il peut également ne pas y avoir de transactions ce mois-là.

Problème 4 : Changement d'URL de l'API
→ Consultez la page détaillée de l'API sur le portail des données publiques. La structure de l'URL peut changer périodiquement. La vérification de l'adresse "Endpoint" de l'API sur la page détaillée est la méthode la plus précise.

Liés au web scraping de Naver Real Estate

**Problème 1 : Ré

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.