À 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.