Von hier an werden wir tiefer in die Materie einsteigen, um die spezifischen Elemente zu extrahieren, die Informationen zu Preis, Bildtyp und Bewertung enthalten.
Fügen Sie nach den zuvor vorgestellten Codezeilen Folgendes ein:
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)
Wie du sehen kannst, rufen wir für jedes Inserat, das wir auf der ersten Seite finden, das Preis-Element, den Speicherort der Bildquelle, den Typ des Inserats und die Bewertung ab. Am Ende erhalten wir ein Array von Objekten, von denen jedes alle Elemente dieser Liste enthält.
Nachdem wir nun den gesamten Code geschrieben haben, der zum Scrapen der Airbnb-Informationen erforderlich ist, sollte die Datei index.js in etwa so aussehen:
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)
})()
Wie Sie sehen, ist das Scrapen von Airbnb-Daten mit der WebScrapingAPI ziemlich einfach.
- Senden Sie eine Anfrage an die WebScrapingAPI mit den erforderlichen Parametern: dem API-Schlüssel und der URL, von der wir Daten scrapen möchten.
- Laden Sie das DOM mit JSDOM.
- Wählen Sie alle Einträge aus, indem Sie die spezifische Klasse finden.
- Rufe für jedes Inserat den Preis, das Bild, den Inserattyp und die Bewertung ab.
- Fügen Sie jeden Eintrag einem neuen Array namens „results“ hinzu.
- Geben Sie das neu erstellte Array „results“ auf dem Bildschirm aus.
Die Ausgabe sollte in etwa so aussehen:
[
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'
},
...
]
Eine der Einschränkungen, mit denen wir derzeit konfrontiert sind, besteht darin, dass wir die Informationen nur von einer Seite unserer Suche scrapen. Dies lässt sich beheben, indem man einen Headless-Browser wie Puppeteer oder ein Browser-Automatisierungstool wie Selenium verwendet. Damit können wir die meisten Aufgaben ausführen, die wir manuell in einem Webbrowser erledigen können, wie zum Beispiel das Ausfüllen eines Formulars oder das Klicken auf eine Schaltfläche.
Wir empfehlen dir, unseren ultimativen Leitfaden zum Web-Scraping mit JavaScript und Node.js zu lesen, wenn du mehr über diese Technologien erfahren möchtest.