Pourquoi quelqu'un voudrait-il extraire des données d'Airbnb ?
Airbnb est une plateforme qui permet aux gens de louer leurs biens immobiliers à l’aide d’une simple connexion Internet. Elle a été fondée en 2008 par Brian Chesky, Nathan Blecharczyk et Joe Gebbia et a connu un succès fulgurant, même pendant la pandémie.
Tout le monde peut trouver les annonces sur la plateforme en se rendant simplement sur Airbnb et en recherchant un logement, mais il n'existe pas de moyen simple de trouver un ensemble de données pertinent contenant les informations suivantes :
- Combien y a-t-il d'annonces dans une ville ?
- À quel prix sont-elles proposées ?
- À quoi ressemblent-ils ?
- Comment sont-ils notés ?
Bien sûr, vous avez vos propres raisons de vouloir obtenir ces informations et je suis sûr que nous pouvons vous aider.
C'est parti !
Extraction de données à l'aide d'une API de web scraping
Pour pouvoir extraire toutes les données nécessaires, assurez-vous de suivre les étapes suivantes.
1. Inspecter le code source
Identifiez les éléments que vous souhaitez extraire du site web d'Airbnb. En cliquant avec le bouton droit de la souris n'importe où sur la page et en sélectionnant l'option « Inspecter », vous accéderez aux outils de développement.
Imaginons que nous souhaitions obtenir le prix, l'image, le type et la note des logements que nous allons extraire.
Tout d'abord, nous allons rechercher l'élément commun dans le DOM. Il semble que _gigle7 soit ce que nous recherchons.

2. Choisir un outil de scraping
Pour obtenir les meilleurs résultats, nous vous recommandons d’utiliser notre service, WebScrapingAPI, car c’est sur celui-ci que nous baserons notre tutoriel. Vous pouvez l’essayer gratuitement en cliquant sur ce lien. Créez un compte et revenez sur cette page une fois que vous avez terminé.
Une fois connecté, rendez-vous sur la page du tableau de bord. Vous y trouverez votre clé d'accès API privée, que nous utiliserons pour effectuer les requêtes, l'espace de test API où vous pouvez tester notre produit, ainsi que la documentation.

3. Configuration du projet
Après avoir créé un dossier pour le projet, exécutez les commandes suivantes :
npm init -y
npm install got jsdom
Pour effectuer les requêtes, nous allons installer le module got, et pour l'analyse HTML, nous utiliserons le package jsdom.
Créez un nouveau fichier nommé « index.js » et ouvrez-le.
4. Envoyer la requête
Définissons les paramètres, envoyons la requête et analysons le code HTML. Écrivez les lignes suivantes dans le fichier créé précédemment :
const {JSDOM} = require("jsdom")
const got = require("got")
(async () => {
const params = {
api_key: "YOUR_API_KEY",
url: "https://www.airbnb.com/s/Berlin/homes?tab_id=home_tab&refinement_paths%5B%5D=%2Fhomes&flexible_trip_dates%5B%5D=april&flexible_trip_dates%5B%5D=may&flexible_trip_lengths%5B%5D=weekend_trip&date_picker_type=calendar&source=structured_search_input_header&search_type=filter_change&place_id=ChIJAVkDPzdOqEcRcDteW0YgIQQ&checkin=2021-04-01&checkout=2021-04-08"
}
const response = await got('https://api.webscrapingapi.com/v1', {searchParams: params})
const {document} = new JSDOM(response.body).window
const places = document.querySelectorAll('._gig1e7')
})()
Comme nous l'avons déjà indiqué, toutes les informations pertinentes se trouvent sous l'élément _gigle7 ; nous allons donc récupérer tous les éléments attribués à la classe _gigle7. Vous pouvez afficher les résultats à l'écran en ajoutant une action console.log() juste après la ligne où nous définissons les variables.
console.log(places)5. Obtenir les données au format JSON
À partir de là, nous allons approfondir notre analyse pour extraire les éléments spécifiques contenant les informations relatives au prix, au type d'image et à la note.
Après les lignes de code présentées précédemment, copiez ce qui suit :
const results = []
places.forEach(place => {
if (place) {
const price = place.querySelector('._ls0e43')
if (price) place.price = price.querySelector('._krjbj').innerHTML
const image = place.querySelector('._91slf2a')
if (image) place.image = image.src
const type = place.querySelector('._b14dlit')
if (type) place.type = type.innerHTML
const rating = place.querySelector('._10fy1f8')
if (rating) place.rating = rating.innerHTML
results.push(place)
}
})
console.log(results)
Comme vous pouvez le voir, pour chaque annonce que nous récupérons sur la première page, nous récupérons l'élément de prix, l'emplacement de la source de l'image, le type de l'annonce et la note. Au final, nous aurons un tableau d'objets, et chacun d'entre eux contiendra tous les éléments de cette liste.
Maintenant que nous avons écrit tout le code nécessaire pour extraire les informations Airbnb, le fichier index.js devrait ressembler à ceci :
const {JSDOM} = require("jsdom");
const got = require("got");
(async () => {
const params = {
api_key: "YOUR_API_KEY",
url: "https://www.airbnb.com/s/Berlin/homes?tab_id=home_tab&refinement_paths%5B%5D=%2Fhomes&flexible_trip_dates%5B%5D=april&flexible_trip_dates%5B%5D=may&flexible_trip_lengths%5B%5D=weekend_trip&date_picker_type=calendar&source=structured_search_input_header&search_type=filter_change&place_id=ChIJAVkDPzdOqEcRcDteW0YgIQQ&checkin=2021-04-01&checkout=2021-04-08"
}
const response = await got('https://api.webscrapingapi.com/v1', {searchParams: params})
const {document} = new JSDOM(response.body).window
const places = document.querySelectorAll('._gig1e7')
const results = []
places.forEach(place => {
if (place) {
const price = place.querySelector('._ls0e43')
if (price) place.price = price.querySelector('._krjbj').innerHTML
const image = place.querySelector('._91slf2a')
if (image) place.image = image.src
const type = place.querySelector('._b14dlit')
if (type) place.type = type.innerHTML
const rating = place.querySelector('._10fy1f8')
if (rating) place.rating = rating.innerHTML
results.push(place)
}
})
console.log(results)
})()
Comme vous pouvez le voir, extraire les données d'Airbnb à l'aide de WebScrapingAPI est assez simple.
- Envoyez une requête à WebScrapingAPI en utilisant les paramètres nécessaires : la clé API et l'URL à partir de laquelle nous devons extraire les données.
- Chargez le DOM à l'aide de JSDOM.
- Sélectionnez toutes les annonces en recherchant la classe spécifique.
- Pour chaque annonce, récupérez le prix, l'image, le type d'annonce et la note.
- Ajoutez chaque annonce à un nouveau tableau appelé « results ».
- Affichez le tableau « results » nouvellement créé à l'écran.
La réponse devrait ressembler à ceci :
[
HTMLDivElement {
price: '$47 per night, originally $67',
image: 'https://a0.muscache.com/im/pictures/miso/Hosting-46812239/original/c56d6bb5-3c2f-4374-ac01-ca84a50d31cc.jpeg?im_w=720',
type: 'Room in serviced apartment in Friedrichshain',
rating: '4.73'
},
HTMLDivElement {
price: '$82 per night, originally $109',
image: 'https://a0.muscache.com/im/pictures/miso/Hosting-45475252/original/f6bd7cc6-f72a-43ef-943e-deba27f8253d.jpeg?im_w=720',
type: 'Entire serviced apartment in Mitte',
rating: '4.80'
},
HTMLDivElement {
price: '$97 per night, originally $113',
image: 'https://a0.muscache.com/im/pictures/92966859/7deb381e_original.jpg?im_w=720',
type: 'Entire apartment in Mitte',
rating: '4.92'
},
HTMLDivElement {
price: '$99 per night, originally $131',
image: 'https://a0.muscache.com/im/pictures/f1b953ca-5e8a-4fcd-a224-231e6a92e643.jpg?im_w=720',
type: 'Entire apartment in Prenzlauer Berg',
rating: '4.90'
},
HTMLDivElement {
price: '$56 per night, originally $61',
image: 'https://a0.muscache.com/im/pictures/bb0813a6-e9fe-4f0a-81a8-161440085317.jpg?im_w=720',
type: 'Entire apartment in Tiergarten',
rating: '4.67'
},
...
]
L'une des limites auxquelles nous sommes actuellement confrontés est que nous ne récupérons les informations que sur une seule page de notre recherche. Cela peut être résolu en utilisant un navigateur sans interface graphique, comme Puppeteer, ou un outil d'automatisation de navigateur comme Selenium. Cela nous permettra d'effectuer la plupart des tâches que nous pouvons réaliser manuellement dans un navigateur web, comme remplir un formulaire ou cliquer sur un bouton.
Nous vous encourageons à consulter notre Guide ultime du web scraping avec JavaScript et Node.js si vous souhaitez en savoir plus sur ces technologies.
La puissance du web scraping
Comme vous pouvez le constater, nous avons réussi à créer un scraper web basique en seulement quelques minutes. À partir de là, seule votre imagination vous limite. Si vous êtes suffisamment ambitieux, vous pouvez même utiliser les données que vous collectez pour visualiser la répartition et la concentration des propriétés sur une carte. Airbnb vous fournit toutes les informations nécessaires en haut de chaque page d'annonce.
Comme vous avez pu le constater, le web scraping peut être l’une des façons les plus ludiques de passer votre temps en tant que développeur logiciel. Vous pouvez facilement récupérer toutes les données dont vous avez besoin pour créer une nouvelle application destinée à un créneau spécifique ou simplement pour perfectionner vos compétences. Si vous rencontrez des difficultés avec le processus, n’hésitez pas à demander de l’aide dans la section commentaires et nous serons ravis de vous aider !
Si cet article ne vous a pas aidé à bien comprendre les possibilités du web scraping, vous pouvez consulter un autre exemple montrant comment les entreprises peuvent créer un web scraper étape par étape.
Merci de votre attention ! Bon scraping !




