de
English
Español
中國人
Tiếng Việt
Українська
Português
Français
भारतीय
Türkçe
한국인
Italiano
Gaeilge
اردو
Indonesia
Polski Web Scraping airbnb python und Scraping Airbnb-Daten sind für die Analyse des Immobilienmarktes, die Erforschung der Mietpreisdynamik, die Durchführung von Wettbewerbsanalysen und die Bewertung von Rezensionen und Bewertungen entscheidend. Dies kann durch Scraping-Techniken erreicht werden. Der Zugriff auf diese Informationen kann jedoch schwierig sein, da das Scraping gegen die Nutzungsbedingungen der Website verstoßen kann.
Als Nächstes werden wir eine Schritt-für-Schritt-Anleitung für die Entwicklung eines Web-Scrapers mit Python und Selenium zum Scrapen von airbnb-Listings erkunden. In diesem Leitfaden wird auch erläutert, wie man potenzielle Sperren und Einschränkungen der Plattform umgehen kann.
Der erste Schritt bei der Erstellung eines Web Scrapers besteht darin, zu verstehen, wie man auf die Webseiten zugreift, an denen man interessiert ist, da sich die Struktur von Websites oft ändert. Um sich mit der Struktur einer Website vertraut zu machen, können Sie die Entwicklerwerkzeuge des Browsers verwenden, um den HTML-Code der Webseite zu untersuchen.
Um auf die Entwicklertools zuzugreifen, klicken Sie mit der rechten Maustaste auf die Webseite und wählen Sie "Prüfen" oder verwenden Sie die Tastenkombination:
Jeder Auflistungscontainer ist in ein div-Element mit dem folgenden Attribut eingeschlossen: class="g1qv1ctd".
Wenn man auf "location" klickt und "London, UK" eingibt, erhält man Zugang zu den in London angebotenen Orten. Die Website schlägt vor, Check-in- und Check-out-Daten einzugeben. So können sie den Preis für die Zimmer berechnen.
Die URL für diese Seite würde etwa so aussehen:
url = "https://www.airbnb.com/s/London--United-Kingdom/homes?tab_id=home_tab&refinement_paths%5B%5D=%2Fhomes&flexible_trip_lengths%5B%5D=one_week&monthly_start_date=2024-01-01&monthly_length=3&price_filter_input_type=0&channel=EXPLORE&query=London%2C%20United%20Kingdom&place_id=ChIJdd4hrwug2EcRmSrV3Vo6llI&date_picker_type=calendar&source=structured_search_input_header&search_type=autocomplete_click"
Von der Suchseite aus werden wir die folgenden Attribute der Produktlistendaten von Airbnb abrufen:
Um mit dem Web-Scraping von Airbnb-Python-Daten zu beginnen, müssen Sie zunächst Ihre Entwicklungsumgebung einrichten. Hier sind die Schritte dazu:
Virtuelle Umgebungen ermöglichen es Ihnen, Python-Pakete und ihre Abhängigkeiten für verschiedene Projekte zu isolieren. Die Abhängigkeiten der einzelnen Projekte sind garantiert korrekt, wenn keine projektübergreifenden Interferenzen bestehen.
Windows-Benutzer können eine virtuelle Umgebung mit dem Namen "venv" erstellen, indem sie eine Eingabeaufforderung mit Administratorrechten öffnen und den Befehl ausführen:
python -m venv venv
Um die neu erstellte virtuelle Umgebung zu aktivieren, führen Sie den Befehl aus:
venv\Scripts\activate
Öffnen Sie ein Terminal und führen Sie den folgenden Befehl aus, um eine neue virtuelle Umgebung mit der Bezeichnung "venv" einzurichten:
sudo python3 -m venv venv
Aktivieren Sie die virtuelle Umgebung:
source venv/bin/activate
Um die virtuelle Umgebung zu deaktivieren, führen Sie einfach den folgenden Befehl aus:
deactivate
Nachdem Sie nun eine virtuelle Umgebung eingerichtet haben, können Sie die erforderlichen Bibliotheken installieren.
Führen Sie in Ihrer aktivierten virtuellen Umgebung den folgenden Befehl aus, um die erforderlichen Bibliotheken zu installieren:
pip install selenium beautifulsoup4 lxml seleniumwire
Selenium benötigt einen Treiber für die Schnittstelle mit dem gewählten Browser. Für diese Anleitung verwenden wir Chrome. Bitte stellen Sie jedoch sicher, dass Sie den entsprechenden WebDriver für den Browser Ihrer Wahl installiert haben.
Stellen Sie nach dem Download sicher, dass sich der Treiber in einem Verzeichnis befindet, auf das die Umgebungsvariable PATH Ihres Systems zugreift. Dies ermöglicht es Selenium, den Treiber zu finden und den Browser zu steuern.
Wie oben erwähnt, müssen Sie zunächst die Bibliotheken Seleniumwire und BeautifulSoup in Ihre Python-Datei importieren. So sieht es aus:
from seleniumwire import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import time
import csv
import random
Wir werden auch die Bibliotheken `random`, `time` und `csv` für verschiedene Dienstprogramme importieren.
Als Nächstes definieren wir eine Liste von Proxys, um zu vermeiden, dass Airbnb sie blockiert. Wenn Sie versuchen, eine Anfrage ohne einen Premium-Proxy zu senden, kann es sein, dass Sie die Antwort "Zugriff verweigert" erhalten.
Sie können einen Proxy wie folgt einrichten:
# Liste der Bevollmächtigten
proxies = [
"username:password@Your_proxy_IP_Address:Your_proxy_port1",
"username:password@Your_proxy_IP_Address:Your_proxy_port2",
"username:password@Your_proxy_IP_Address:Your_proxy_port3",
"username:password@Your_proxy_IP_Address:Your_proxy_port4",
"username:password@Your_proxy_IP_Address:Your_proxy_port5",
]
Stellen Sie sicher, dass Sie die Felder "YourproxyIPAddress" und "Yourproxy_port" mit den entsprechenden Informationen modulus Ihrer Proxy-Adresse von Proxy-seller anpassen. Vergessen Sie auch nicht, die Platzhalter "username" und "password" durch Ihre tatsächlichen Anmeldedaten zu ersetzen.
Das Rotieren von Proxys ist ein wichtiger Schritt beim Web Scraping. Websites blockieren oder beschränken oft den Zugang für Bots und Scraper, wenn sie mehrere Anfragen von derselben IP-Adresse erhalten. Indem Sie verschiedene Proxy-IP-Adressen verwenden, können Sie die Entdeckung vermeiden, als mehrere organische Nutzer auftreten und die meisten Anti-Scraping-Maßnahmen der Website umgehen.
Um die Rotation einzurichten, importieren Sie die "random"-Bibliothek. Wir definieren auch eine Funktion `get_proxy()`, um einen Proxy aus unserer Liste auszuwählen. Diese Funktion wählt nach dem Zufallsprinzip ein Element aus der Liste der Proxys mit der Methode random.choice() aus.
def get_proxy():
return random.choice(proxies)
Als Nächstes definieren wir die Hauptfunktion "Auflistungen()". Hier werden wir unseren "ChromeDriver" einrichten. Diese Funktion verwendet Selenium, um auf der Seite mit den Immobilienangeboten zu navigieren, wartet, bis die Seite geladen ist, und parst den HTML-Code mit Beautiful Soup.
def listings(url):
proxy = get_proxy()
proxy_options = {
"proxy": {
"http": f"http://{proxy}",
"https": f"http://{proxy}",
"no_proxy": "localhost,127.0.0.1",
}
}
chrome_options = Options()
chrome_options.add_argument("--headless")
s = Service(
"C:/Path_To_Your_WebDriver"
) # Ersetzen Sie durch den Pfad zum ChromeDriver
driver = webdriver.Chrome(
service=s, seleniumwire_options=proxy_options, chrome_options=chrome_options
)
driver.get(url)
time.sleep(8) # Anpassung auf Basis der Ladezeit der Website
soup = BeautifulSoup(driver.page_source, "lxml")
driver.quit()
Um Airbnb mit Python zu scrapen, wählen wir zunächst einen zufälligen Proxy aus und richten die Optionen ein. Diese Optionen werden für die Konfiguration des Webdrivers verwendet. Als nächstes richten wir die Chrome-Optionen ein. Fügen Sie das Argument --headless hinzu, um den Browser im Headless-Modus auszuführen, was bedeutet, dass der Browser im Hintergrund ohne eine grafische Benutzeroberfläche läuft.
Dann initialisieren Sie den Webdriver mit dem Dienst, den Seleniumwire-Optionen und den Chrome-Optionen. Der Webdriver wird dann verwendet, um zur angegebenen URL zu navigieren. Wir fügen eine Ruhezeit von 8 Sekunden hinzu, damit die Seite vollständig geladen werden kann, und parsen dann das zurückgegebene HTML mit Beautiful Soup. Nachdem das Parsen abgeschlossen ist, wird der Webdriver geschlossen.
Sobald Sie den HTML-Inhalt erfolgreich erhalten haben, besteht der nächste Schritt darin, die relevanten Daten für jede Eigenschaft zu extrahieren. Mit BeautifulSoup können wir leicht durch die Struktur navigieren und die Abschnitte finden, die die erforderlichen Informationen enthalten.
Zunächst werden alle Blöcke auf der Seite identifiziert, die Details zu einer Immobilie enthalten. Zu diesen Abschnitten gehören die URL, der Titel, die Beschreibung, die Bewertung, der Preis und alle weiteren Informationen.
listing_elements = soup.find_all("div", class_="g1qv1ctd")
for listing_element in listing_elements:
Dieser Code verwendet die find_all()-Methode von BeautifulSoup, um alle div-Tags mit der Klasse "g1qv1ctd" zu finden. Jedes dieser Tags steht für eine einzelne Immobilie auf der Airbnb-Seite. Anschließend werden sie in Schleifen durchlaufen, um die relevanten Daten zu sammeln.
Für jeden gefundenen Block wird die URL extrahiert.
URL_element = soup.find("a", class_="rfexzly")
listing_data["Listing URL"] = (
"https://www.airbnb.com" + URL_element["href"] if URL_element else ""
)
Wir suchen in unserem Soup-Objekt nach einem Anker-Tag mit der Klasse "rfexzly". Wenn es gefunden wird, wird das "href"-Attribut (das die relative URL enthält) extrahiert und mit der Basis-URL kombiniert, um die vollständige Adresse zu erstellen. Wenn es nicht gefunden wird, wird eine leere Zeichenfolge verwendet, um Fehler zu vermeiden.
Als Nächstes erfassen wir den Titel, der sich in einem div-Tag mit der Klasse "t1jojoys" befindet. Wir rufen den Text ab und bereinigen ihn. Wenn das Tag nicht vorhanden ist, speichern wir einfach eine leere Zeichenfolge.
title_element = listing_element.find("div", class_="t1jojoys")
listing_data["Title"] = (
title_element.get_text(strip=True) if title_element else ""
)
Description_element = listing_element.find("span", class_="t6mzqp7")
listing_data["Description"] = (
Description_element.get_text(strip=True) if Description_element else ""
)
Ähnlich wie bei der Ermittlung des Titels findet dieser Teil ein span-Tag mit der Klasse "t6mzqp7". Wir extrahieren und bereinigen den Textinhalt, der eine kurze Beschreibung der Eigenschaft enthält.
rating_element = listing_element.find("span", class_="ru0q88m")
listing_data["Rating"] = (
rating_element.get_text(strip=True) if rating_element else ""
)
Wie im obigen Code gezeigt, enthält ein span-Tag mit der Klasse "ru0q88m" den Bewertungswert. Wir extrahieren und bereinigen ihn, um zusätzliche Leerzeichen zu entfernen.
Schließlich extrahieren wir den Preis.
price_element = listing_element.select_one("._1y74zjx")
listing_data["Price"] = (
f"{price_element.get_text(strip=True)} per night" if price_element else ""
)
Dieser Code sucht nach dem Element mit der Klasse "_1y74zjx" innerhalb des aktuellen listing_element. Wenn dieses Element, das normalerweise die Preisinformationen enthält, gefunden wird, wird sein Textinhalt extrahiert, bereinigt und mit "pro Nacht" ergänzt, um eine informativere Preiszeichenkette zu bilden.
Einige Eigenschaften können zusätzliche Details enthalten.
listing_info_element = listing_element.find("span", {"aria-hidden": "true"})
listing_data["Additional Listing information"] = (
listing_info_element.get_text(strip=True) if listing_info_element else ""
)
Wir suchen nach einem span-Tag mit dem Attribut aria-hidden="true", um diese zusätzlichen Informationen zu finden. Nachdem wir alle relevanten Daten aus einer einzelnen Eigenschaft gesammelt haben, fügen wir sie unserer Liste hinzu:
listings.append(listing_data)
Sobald alle Einträge verarbeitet wurden, geben wir die Liste der Einträge zurück, die jeweils als Wörterbuch mit den extrahierten Daten dargestellt werden.
return listings
Nachdem wir erfolgreich Daten von den Airbnb-Seiten abgerufen haben, besteht der nächste wichtige Schritt darin, diese wertvollen Informationen für zukünftige Analysen und Referenzen zu speichern. Für diese Aufgabe verwenden wir die csv-Bibliothek. Wir öffnen eine CSV-Datei im Schreibmodus und erstellen ein csv.DictWriter-Objekt. Dann schreiben wir den Header und die Daten in die Datei.
airbnb_listings = listings(url)
csv_file_path = "proxy_web_listings_output.csv"
with open(csv_file_path, "w", encoding="utf-8", newline="") as csv_file:
fieldnames = [
"Listing URL",
"Title",
"Description",
"Rating",
"Price",
"Additional Listing information",
]
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
for listing in airbnb_listings:
writer.writerow(listing)
print(f"Data has been exported to {csv_file_path}")
Hier ist ein vollständiger Python-Code zum Scrapen von airbnb, den wir für dieses Tutorial verwendet haben:
from seleniumwire import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import time
import csv
import random
# Liste der Bevollmächtigten
proxies = [
"username:password@Your_proxy_IP_Address:Your_proxy_port1",
"username:password@Your_proxy_IP_Address:Your_proxy_port2",
"username:password@Your_proxy_IP_Address:Your_proxy_port3",
"username:password@Your_proxy_IP_Address:Your_proxy_port4",
"username:password@Your_proxy_IP_Address:Your_proxy_port5",
]
def get_proxy():
return random.choice(proxies)
def listings(url):
proxy = get_proxy()
proxy_options = {
"proxy": {
"http": f"http://{proxy}",
"https": f"http://{proxy}",
"no_proxy": "localhost,127.0.0.1",
}
}
chrome_options = Options()
chrome_options.add_argument("--headless")
s = Service(
"C:/Path_To_Your_WebDriver"
) # Ersetzen Sie durch den Pfad zum ChromeDriver
driver = webdriver.Chrome(
service=s, seleniumwire_options=proxy_options, chrome_options=chrome_options
)
driver.get(url)
time.sleep(8) # Anpassung basierend auf der Ladezeit der Website
soup = BeautifulSoup(driver.page_source, "lxml")
driver.quit()
listings = []
# Alle Listenelemente auf der Seite finden
listing_elements = soup.find_all("div", class_="g1qv1ctd")
for listing_element in listing_elements:
# Daten aus jedem Listenelement extrahieren
listing_data = {}
# Auflistung der URL
URL_element = soup.find("a", class_="rfexzly")
listing_data["Listing URL"] = (
"https://www.airbnb.com" + URL_element["href"] if URL_element else ""
)
# Titel
title_element = listing_element.find("div", class_="t1jojoys")
listing_data["Title"] = (
title_element.get_text(strip=True) if title_element else ""
)
# Beschreibung
Description_element = listing_element.find("span", class_="t6mzqp7")
listing_data["Description"] = (
Description_element.get_text(strip=True) if Description_element else ""
)
# Bewertung
rating_element = listing_element.find("span", class_="ru0q88m")
listing_data["Rating"] = (
rating_element.get_text(strip=True) if rating_element else ""
)
# Preis
price_element = listing_element.select_one("._1y74zjx")
listing_data["Price"] = (
f"{price_element.get_text(strip=True)} per night" if price_element else ""
)
# Zusätzliche Informationen zum Angebot
listing_info_element = listing_element.find("span", {"aria-hidden": "true"})
listing_data["Additional Listing information"] = (
listing_info_element.get_text(strip=True) if listing_info_element else ""
)
# Anhängen der Listendaten an die Liste
listings.append(listing_data)
return listings
url = "https://www.airbnb.com/s/London--United-Kingdom/homes?tab_id=home_tab&refinement_paths%5B%5D=%2Fhomes&flexible_trip_lengths%5B%5D=one_week&monthly_start_date=2024-01-01&monthly_length=3&price_filter_input_type=0&channel=EXPLORE&query=London%2C%20United%20Kingdom&place_id=ChIJdd4hrwug2EcRmSrV3Vo6llI&date_picker_type=calendar&source=structured_search_input_header&search_type=autocomplete_click"
airbnb_listings = listings(url)
csv_file_path = "proxy_web_listings_output.csv"
with open(csv_file_path, "w", encoding="utf-8", newline="") as csv_file:
fieldnames = [
"Listing URL",
"Title",
"Description",
"Rating",
"Price",
"Additional Listing information",
]
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
for listing in airbnb_listings:
writer.writerow(listing)
print(f"Data has been exported to {csv_file_path}")
Das Codesegment garantiert, dass alle vom Scraper gesammelten Daten in einer Datei namens "proxyweblistings_output.csv" im CSV-Format gespeichert werden.
Die Ergebnisse unseres Scrapers werden in einer CSV-Datei mit dem Namen "proxy_web_listings_output.csv" gespeichert (siehe unten).
In diesem Leitfaden wird effektiv erklärt, wie man Airbnb-Daten mit Python ausliest und so wichtige Details wie Preise, Verfügbarkeit und Bewertungen extrahieren kann. Es wird betont, wie wichtig es ist, Proxys zu verwenden und sie zu rotieren, um zu verhindern, dass sie durch die Anti-Bot-Maßnahmen von Airbnb blockiert werden.
Das Scrapen von airbnb-Daten mit Python und Selenium ermöglicht Ihnen den direkten Zugriff auf wertvolle Informationen wie Preise und Verfügbarkeit - wichtige Erkenntnisse für die Marktforschung, die Investitionsanalyse oder sogar den Aufbau eigener Immobilien-Tools. Der Prozess ist zwar mit technischen Herausforderungen (und einigen rechtlichen Grauzonen) verbunden, aber wenn Sie die richtige Umgebung einrichten, verstehen, wie die Website funktioniert, und Tools wie Proxys und Headless-Browser verwenden, können Sie die meisten Hindernisse umgehen. Achten Sie nur darauf, dass Sie die Nutzungsbedingungen der Plattform einhalten und stets verantwortungsvoll mit den Daten umgehen.
Bemerkungen: 0