Comment scraper Airbnb : guide 2025

Découvrez comment extraire des données d’Airbnb et les outils de scraping web de Bright Data qui facilitent cette tâche.
17 min de lecture
How to Scrape Airbnb

Ce tutoriel vous guide dans le processus de collecte manuelle de données publiques à partir d’Airbnb à l’aide de Python. Les données collectées peuvent aider à analyser les tendances du marché, à élaborer des stratégies de prix compétitives, à effectuer des analyses de sentiment à partir des avis des clients ou à créer des systèmes de recommandation.

Découvrez également les solutions avancées de Bright Data. Ses Proxy spécialisés et ses navigateurs de scraping simplifient et améliorent le processus d’extraction des données.

Comment extraire des données d’Airbnb

Avant de nous lancer, il est recommandé d’avoir quelques connaissances de base en matière de Scraping web et de HTML. De plus, assurez-vous d’installer Python sur votre ordinateur si vous ne l’avez pas déjà fait. Leguide officiel Pythonfournit des instructions détaillées sur la manière de procéder. Si Python est déjà installé, assurez-vous qu’il est mis à jour vers la version 3.7.9 ou une version plus récente. Nous vous recommandons également de lire le tutoriel complet sur le Scraping web avec Python avant de commencer.

Une fois Python installé, lancez votre terminal ou votre interface de ligne de commande et créez un nouveau répertoire de projet à l’aide des commandes suivantes :

mkdir airbnb-scraper && cd airbnb-scraper

Après avoir créé un nouveau répertoire de projet, vous devez configurer certaines bibliothèques supplémentaires que vous utiliserez pour le Scraping web. Plus précisément, vous utiliserez Requests, une bibliothèque permettant les requêtes HTTP en Python ; pandas, une bibliothèque robuste dédiée à la manipulation et à l’analyse de données ; Beautiful Soup (BS4) pour l’analyse du contenu HTML ; et Playwright pour l’automatisation des tâches basées sur le navigateur.

Pour installer ces bibliothèques, ouvrez votre terminal ou votre shell et exécutez les commandes suivantes :

  pip3 install beautifulsoup4
   pip3 install requests
   pip3 install pandas
   pip3 install playwright
   playwright install

Assurez-vous que le processus d’installation s’est déroulé sans erreur avant de passer à l’étape suivante de ce tutoriel.

Remarque : la dernière commande (c’est-à-dire playwright install) est nécessaire pour installer les binaires du navigateur.

Structure et objets de données Airbnb

Avant de commencer à scraper Airbnb, il est essentiel de vous familiariser avec sa structure. La page principale d’Airbnb comporte une barre de recherche conviviale qui vous permet de rechercher des options d’hébergement, des expériences et même des aventures.

Une fois vos critères de recherche saisis, les résultats s’affichent sous forme de liste, indiquant les noms, les prix, les emplacements, les notes et d’autres détails pertinents des propriétés. Il est important de noter que ces résultats de recherche peuvent être filtrés en fonction de différents paramètres, tels que la fourchette de prix, le type de propriété et les dates de disponibilité.

Si vous souhaitez obtenir plus de résultats de recherche que ceux initialement présentés, vous pouvez utiliser les boutons de pagination situés en bas de la page. Chaque page contient généralement de nombreuses annonces, ce qui vous permet de consulter d’autres propriétés. Les filtres situés en haut de la page vous permettent d’affiner votre recherche en fonction de vos besoins et de vos préférences.

Pour vous aider à comprendre la structure HTML du site web d’Airbnb, suivez ces étapes :

  1. Accédez au site web d’Airbnb.
  2. Saisissez le lieu souhaité, la période et le nombre de personnes dans la barre de recherche, puis appuyez sur Entrée.
  3. Lancez les outils de développement du navigateur en cliquant avec le bouton droit de la souris sur une fiche de propriété et en sélectionnant Inspecter.
  4. Explorez la structure HTML pour identifier les balises et les attributs qui contiennent les données que vous souhaitez extraire.

Extraire une annonce Airbnb

Maintenant que vous en savez plus sur la structure d’Airbnb, configurez Playwright pour accéder à une annonce Airbnb et extraire les données. Dans cet exemple, vous allez recueillir le nom de l’annonce, son emplacement, les détails des prix, les coordonnées du propriétaire et les avis.

Créez un nouveau script Python, airbnb_scraper.py, et ajoutez le code suivant :

import asyncio
from playwright.async_api import async_playwright
import pandas as pd

async def scrape_airbnb():
   async with async_playwright() as pw:
       # Lancer un nouveau navigateur
       browser = await pw.chromium.launch(headless=False)
       page = await browser.new_page()
       # Aller à l'URL Airbnb
       await page.goto('https://www.airbnb.com/s/homes', timeout=600000)
       # Attendre le chargement des annonces
       await page.wait_for_selector('div.g1qv1ctd.c1v0rf5q.dir.dir-ltr')
       # Extraire les informations
       results = []
       listings = await page.query_selector_all('div.g1qv1ctd.c1v0rf5q.dir.dir-ltr')
       for listing in listings:
           result = {}
           # Nom de la propriété
           name_element = await listing.query_selector('div[data-testid="listing-card-title"]')
           if name_element:
               result['property_name'] = await page.evaluate("(el) => el.textContent", name_element)
           else:
               result['property_name'] = 'N/A'
           # Emplacement
           location_element = await listing.query_selector('div[data-testid="listing-card-subtitle"]')
           result['location'] = await location_element.inner_text() if location_element else 'N/A'
           # Prix
           price_element = await listing.query_selector('div._1jo4hgw')
           result['price'] = await price_element.inner_text() if price_element else 'N/A'
           results.append(result)
      
       # Fermer le navigateur
       await browser.close()
      
       return results
# Exécuter le scraper et enregistrer les résultats dans un fichier CSV
results = asyncio.run(scrape_airbnb())
df = pd.DataFrame(results)
df.to_csv('airbnb_listings.csv', index=False)

La fonction scrape_airbnb() ouvre de manière asynchrone un navigateur, visite la page d’accueil des annonces Airbnb et recueille des informations telles que le nom, l’emplacement et le prix de chaque annonce. Si un élément n’est pas trouvé, il est marqué comme N/A. Après traitement, les données acquises sont stockées dans un DataFrame pandas et enregistrées dans un fichier CSV nommé airbnb_listings.csv.

Pour exécuter le script, lancez python3 airbnb_scraper.py dans votre terminal ou votre shell. Votre fichier CSV devrait ressembler à ceci :

property_name,location,price
« Brand bei Bludenz, Autriche », à 343 kilomètres, « 2 047 € 
par nuit »
« Saint-Nabord, France », à 281 kilomètres, « 315 € 
par nuit »
« Kappl, Autriche », à 362 kilomètres, « 1 090 € 
par nuit »
« Fraisans, France », à 394 kilomètres, « 181 € 
par nuit »
« Lanitz-Hassel-Tal, Allemagne », à 239 kilomètres, « 185 € 
par nuit »
« Hohentannen, Suisse », à 291 kilomètres, « 189 € 
par nuit »
… sortie omise…

Améliorez le Scraping web avec les proxys Bright Data

Le scraping de sites web peut parfois poser des difficultés, telles que les interdictions d’IP et le géoblocage. C’est là que les ProxyBright Data s’avèrent utiles, car ils vous permettent de contourner ces obstacles et d’améliorer vos efforts de scraping de données.

Après avoir exécuté le script précédent plusieurs fois, vous remarquerez peut-être que vous ne recevez plus de données. Cela peut se produire si votre adresse IP est détectée par Airbnb et que le site vous empêche de le scraper.

Pour atténuer les difficultés associées, la mise en place de proxys pour le scraping est une approche pratique. Voici quelques-uns des avantages liés à l’utilisation de proxys pour le scraping web :

  • contourner les restrictions IP
  • rotation des adresses IP
  • L’équilibrage de charge garantit la répartition du trafic réseau ou applicatif entre plusieurs ressources, empêchant ainsi qu’un composant unique ne devienne un goulot d’étranglement et offrant une redondance en cas de panne.

Comment intégrer les Proxy Bright Data dans votre script Python

Au vu des avantages mentionnés précédemment, vous comprenez pourquoi il peut être intéressant d’intégrer les Proxy Bright Data dans un script Python. La bonne nouvelle, c’est que c’est facile à faire. Il suffit de créer un compte Bright Data, de configurer vos paramètres Proxy, puis de les implémenter dans votre code Python.

Pour commencer, vous devez créer un compte Bright Data. Pour ce faire, rendez-vous sur le site web de Bright Data et sélectionnez « Essai gratuit », puis suivez les instructions.

Connectez-vous à votre compte Bright Data et cliquez sur la carte de crédit dans la barre de navigation de gauche pour accéder à la facturation. Vous devez alors saisir votre mode de paiement préféré pour activer votre compte :

Ensuite, cliquez sur l’icône en forme d’épingle dans la barre de navigation de gauche pour accéder à la page Proxies & Scraping Infrastructure (Proxys et infrastructure de scraping), puis cliquez sur Add > Residential Proxies(Ajouter > Proxys résidentiels) :

Donnez un nom à votre Proxy (par exemple, proxy_résidentiel1) et utilisez l’option Partagé sous Type d’IP. Cliquez ensuite sur Ajouter:

Une fois votre Proxy résidentiel créé, notez les paramètres d’accès, car vous devrez utiliser ces informations dans votre code :

Pour pouvoir utiliser le Proxy résidentiel Bright Data, vous devez configurer un certificat pour votre navigateur. Vous trouverez les instructions pour installer le certificat dans ce tutoriel Bright Data.

Créez un nouveau script Python airbnb_scraping_proxy.py et ajoutez le code suivant :

from playwright.sync_api import sync_playwright
import pandas as pd

def run(playwright):
   browser = playwright.chromium.launch()
   context = browser.new_context()

   # Configurer le Proxy
   proxy_username='VOTRE_NOM_D'UTILISATEUR_BRIGHTDATA_PROXY'
   proxy_password='VOTRE_MOT_DE_PASSE_PROXY_BRIGHTDATA'
   proxy_host = 'VOTRE_HÔTE_PROXY_BRIGHTDATA'
   proxy_auth=f'{proxy_username}:{proxy_password}'
   proxy_server = f'http://{proxy_auth}@{proxy_host}'

   context = browser.new_context(proxy={
       'server': proxy_server,
       'username': proxy_username,
       'password': proxy_password
   })

   page = context.new_page()
   page.goto('https://www.airbnb.com/s/homes')

   # Attendre le chargement de la page
   page.wait_for_load_state("networkidle")

   # Extraire les données
   results = page.eval_on_selector_all('div.g1qv1ctd.c1v0rf5q.dir.dir-ltr', '''(listings) => {
       return listings.map(listing => {
           return {
               property_name: listing.querySelector('div[data-testid="listing-card-title"]')?.innerText || 'N/A',
               location: listing.querySelector('div[data-testid="listing-card-subtitle"]')?.innerText || 'N/A',
               price: listing.querySelector('div._1jo4hgw')?.innerText || 'N/A'
           }
       })
   }''')

   df = pd.DataFrame(results)
   df.to_csv('airbnb_listings_scraping_proxy.csv', index=False)

   # Fermer le navigateur
   browser.close()

with sync_playwright() as playwright:
   run(playwright)

Ce code utilise la bibliothèque Playwright pour lancer un navigateur Chromium avec un serveur Proxy spécifique. Il accède à la page d’accueil d’Airbnb, extrait des informations telles que les noms des propriétés, leurs emplacements et leurs prix à partir des annonces, puis enregistre les données dans un fichier CSV à l’aide de pandas. Une fois les données extraites, le navigateur est fermé.

Remarque : remplacez proxy_username, proxy_password et proxy_host par vos paramètres d’accès Bright Data.

Pour exécuter le script, lancez python3 airbnb_scraping_proxy.py dans votre terminal ou votre shell. Les données extraites sont enregistrées dans un fichier CSV nommé airbnb_listings_scraping_proxy.csv. Votre fichier CSV devrait ressembler à ceci :

property_name,location,price
« Sithonia, Grèce », Lagomandra, « 3 305 $ 
par nuit »
« Apraos, Grèce », « à 1 080 kilomètres », « 237 $ 
par nuit »
« Magnisia, Grèce », Milopotamos Paralympic, « 200 $ 
par nuit »
« Vourvourou, Grèce », à 861 kilomètres, « 357 $ 
par nuit »
« Rovies, Grèce », à 1 019 kilomètres, « 1 077 $ 
par nuit »
… sortie omise…

Récupération de données Airbnb avec le navigateur de scraping de Bright Data

Le processus de scraping peut être rendu encore plus efficace grâce au Navigateur de scraping Bright Data. Cet outil est spécialement conçu pour le scraping web et offre de nombreux avantages, notamment le déblocage automatique, une mise à l’échelle facile et la détection des logiciels de détection de bots.

Accédez à votre tableau de bord Bright Data et cliquez sur l’icône en forme d’épingle pour accéder à la page Proxies & Scraping Infrastructure (Proxys et infrastructure de scraping) ; cliquez ensuite sur Add > Scraping Browser(Ajouter > Navigateur de scraping) :

How to scrape Airbnb 2023 guide

Donnez-lui un nom (par exemple scraping_browser) et cliquez sur Ajouter:

Sélectionnez ensuite Access parameters (Paramètres d’accès) et enregistrez votre nom d’utilisateur, votre hôte et votre mot de passe. Ces informations vous seront demandées plus loin dans ce guide :

Une fois ces étapes terminées, créez un nouveau script Python nommé airbnb_scraping_brower.py et ajoutez le code suivant :

import asyncio
from playwright.async_api import async_playwright
from bs4 import BeautifulSoup
import pandas as pd

username='VOTRE_NOM_D'UTILISATEUR_BRIGHTDATA'
password='VOTRE_MOT_DE_PASSE_BRIGHTDATA'
auth=f'{username}:{password}'
host = 'VOTRE_HÔTE_BRIGHTDATA'
browser_url = f'wss://{auth}@{host}'

async def scrape_airbnb():
   async with async_playwright() as pw:
       # Lancer un nouveau navigateur
       print('connexion en cours')
       browser = await pw.chromium.connect_over_cdp(browser_url)
       print('connecté')
       page = await browser.new_page()
       # Aller à l'URL Airbnb
       await page.goto('https://www.airbnb.com/s/homes', timeout=120000)
       print('terminé, évaluation en cours')
       # Obtenir l'intégralité du contenu HTML
       html_content = await page.evaluate('()=>document.documentElement.outerHTML')

       # Analyse le HTML avec Beautiful Soup
       soup = BeautifulSoup(html_content, 'html.parser')

       # Extraire les informations
       results = []
       listings = soup.select('div.g1qv1ctd.c1v0rf5q.dir.dir-ltr')
       for listing in listings:
           result = {}
           # Nom de la propriété
           name_element = listing.select_one('div[data-testid="listing-card-title"]')
           result['property_name'] = name_element.text if name_element else 'N/A'
           # Emplacement
           location_element = listing.select_one('div[data-testid="listing-card-subtitle"]')
           result['location'] = location_element.text if location_element else 'N/A'
           # Prix
           price_element = listing.select_one('div._1jo4hgw')
           result['price'] = price_element.text if price_element else 'N/A'
           results.append(result)

       # Fermer le navigateur
       await browser.close()
      
       return results

# Exécuter le scraper et enregistrer les résultats dans un fichier CSV
results = asyncio.run(scrape_airbnb())
df = pd.DataFrame(results)
df.to_csv('airbnb_listings_scraping_browser.csv', index=False)

Ce code utilise le Proxy Bright Data pour se connecter à un navigateur Chromium et extraire les détails des propriétés (c’est-à-dire le nom, l’emplacement et le prix) du site Airbnb. Les données récupérées sont stockées dans une liste, puis enregistrées dans un DataFrame et exportées vers un fichier CSV nommé airbnb_listings_navigateur_de_scraping.csv.

Remarque : n’oubliez pas de remplacer le nom d'utilisateur, le mot de passe et l'hôte par vos paramètres d’accès Bright Data.

Exécutez le code depuis votre terminal ou votre shell :

python3 airbnb_scraping_browser.py 

Vous devriez voir un nouveau fichier CSV nommé airbnb_listings_scraping_browser.csv créé dans votre projet. Le fichier devrait ressembler à ceci :

property_name,location,price
« Benton Harbor, Michigan », Round Lake, « 514 $ 
par nuit »
« Pleasant Prairie, Wisconsin », Lake Michigan, « 366 $ 
par nuit »
« New Buffalo, Michigan », Lake Michigan, « 2 486 $ 
par nuit »
« Fox Lake, Illinois », lac Nippersink, « 199 $ 
par nuit »
« Salem, Wisconsin », lac Hooker, « 880 $ 
par nuit »
… sortie omise…

Maintenant, récupérez certaines données relatives à une seule annonce. Créez un nouveau script Python, airbnb_scraping_single_listing.py, et ajoutez le code suivant :

import asyncio
from playwright.async_api import async_playwright
from bs4 import BeautifulSoup
import pandas as pd
username='VOTRE_NOM_D'UTILISATEUR_BRIGHTDATA'
password='VOTRE_MOT_DE_PASSE_BRIGHTDATA'
auth=f'{username}:{password}'
host = 'VOTRE_HÔTE_BRIGHTDATA'
browser_url = f'wss://{auth}@{host}'
async def scrape_airbnb_listing():
    async with async_playwright() as pw:
        # Lancer un nouveau navigateur
        print('connexion en cours')
        browser = await pw.chromium.connect_over_cdp(browser_url)
        print('connected')
        page = await browser.new_page()
        # Aller à l'URL Airbnb
        await page.goto('https://www.airbnb.com/rooms/26300485', timeout=120000)
        print('terminé, évaluation en cours')
        # Attendre le chargement du contenu
        await page.wait_for_selector('div.tq51prx.dir.dir-ltr h2')
        # Obtenir l'intégralité du contenu HTML
        html_content = await page.evaluate('()=>document.documentElement.outerHTML')
        # Analyse le HTML avec Beautiful Soup
        soup = BeautifulSoup(html_content, 'html.parser')
        # Extraire le nom d'hôte
        host_div = soup.select_one('div.tq51prx.dir.dir-ltr h2')
        host_name = host_div.text.split("hosted by ")[-1] if host_div else 'N/A'
        print(f'Nom d'hôte : {host_name}')
        # Extraire les avis
        reviews_span = soup.select_one('span._s65ijh7 button')
        reviews = reviews_span.text.split(" ")[0] if reviews_span else 'N/A'
        print(f'Avis : {reviews}')
        # Fermer le navigateur
        await browser.close()
        return {
            'host_name': host_name,
            'reviews': reviews,
        }
# Exécuter le scraper et enregistrer les résultats dans un fichier CSV
results = asyncio.run(scrape_airbnb_listing())
df = pd.DataFrame([results]) # results est désormais un dictionnaire
df.to_csv('scrape_airbnb_listing.csv', index=False)

Dans ce code, vous naviguez vers l’URL de l’annonce souhaitée, extrayez le contenu HTML, effectuez une analyse avec Beautiful Soup pour récupérer le nom de l’hôte et le nombre d’avis, et enfin, enregistrez les détails extraits dans un fichier CSV à l’aide de pandas.

Exécutez le code depuis votre terminal ou votre shell :

python3 airbnb_scraping_single_listing.py 

Vous devriez voir apparaître un nouveau fichier CSV nommé scrape_airbnb_listing.csv dans votre projet. Le contenu de ce fichier devrait ressembler à ceci :

host_name,reviews
Amelia,88

Tout le code de ce tutoriel est disponible dans ce référentiel GitHub.

Avantages de l’utilisation du navigateur de scraping Bright Data

Il existe plusieurs raisons pour lesquelles vous devriez envisager de choisir le Navigateur de scraping de Bright Data plutôt qu’une instance Chromium locale. Voici quelques-unes de ces raisons :

  • Déblocage automatique : le navigateur de scraping Bright Data gère automatiquement les CAPTCHA, les pages bloquées et autres obstacles utilisés par les sites web pour dissuader les scrapers. Cela réduit considérablement les risques de blocage de votre scraper.
  • Évolutivité facile : les solutions Bright Data sont conçues pour être facilement évolutives, ce qui vous permet de collecter simultanément des données à partir d’un grand nombre de pages web.
  • Déjouez les logiciels de détection de bots : les sites web modernes utilisent des systèmes sophistiqués de détection de bots. Le Navigateur de scraping Bright Data peut imiter avec succès le comportement humain pour déjouer ces algorithmes de détection.

De plus, si le scraping manuel des données ou la configuration de scripts vous semble trop long ou trop complexe, les jeux de données personnalisés de Bright Data constituent une excellente alternative. Ils proposent un jeu de données Airbnb qui comprend des informations sur les propriétés Airbnb auxquelles vous pouvez accéder et que vous pouvez analyser sans avoir à effectuer vous-même de scraping.

Pour consulter les jeux de données, cliquez sur « Web Data » dans le menu de navigation de gauche, puis sélectionnez « Dataset Marketplace » et recherchez « Airbnb ». Cliquez sur « View dataset ». À partir de cette page, vous pouvez appliquer des filtres et acheter les données que vous souhaitez. Vous payez en fonction du nombre d’enregistrements que vous souhaitez :

Conclusion

Dans ce tutoriel, vous avez appris à extraire des données des annonces Airbnb à l’aide de Python et vous avez vu comment les outils de Bright Data, tels que les Proxy et le Navigateur de scraping, peuvent faciliter encore davantage cette tâche.

Bright Data propose un ensemble d’outils qui peuvent vous aider à collecter rapidement et facilement des données à partir de n’importe quel site web, et pas seulement Airbnb. Ces outils transforment les tâches difficiles de Scraping web en tâches simples, vous permettant ainsi d’économiser du temps et des efforts. Vous ne savez pas quel produit choisir ? Discutez avec les experts en données web de Bright Data pour trouver la solution adaptée à vos besoins en matière de données.

Vous souhaitez scraper d’autres sites web ? Poursuivez votre lecture avec les articles ci-dessous :

Remarque : ce guide a été minutieusement testé par notre équipe au moment de sa rédaction, mais comme les sites web mettent fréquemment à jour leur code et leur structure, certaines étapes peuvent ne plus fonctionner comme prévu.