Heim BlogWeb-Scraping So durchsuchen Sie die Immobilienliste von Homes.com (vollständige Anleitung und Code)

So durchsuchen Sie die Immobilienliste von Homes.com (vollständige Anleitung und Code)

von Kadek

Schritt 4: Senden von Anfragen über ScraperAPI

Die größte Herausforderung beim Scraping von Homes.com besteht darin, nicht durch die Anti-Scraping-Mechanismen blockiert zu werden.

Um ein reibungsloses und effizientes Scraping zu gewährleisten, wird ScraperAPI Folgendes tun:

  • Rotieren Sie unsere IP und Header bei Bedarf
  • Behandeln Sie CAPTCHAs
  • Imitieren Sie echten Datenverkehr mithilfe statistischer Analysen und ML

Und mehr.

Eine weitere Funktion, die wir verwenden werden, ist die Geotargeting-Funktion, die wir durch Angabe von nutzen können ‘country_code’ Parameter in unserer Nutzlast. Dadurch wird sichergestellt, dass unsere Daten regionalspezifisch und korrekt sind.

So richten Sie es ein:

  1. Konstruieren Sie Ihr payload durch Einbeziehung des API-Schlüssels, der erstellten URL für die aktuelle Seite und des Ländercodes. Dadurch wird ScraperAPI genau mitgeteilt, was von wo abgerufen werden soll.


	payload = {
		'api_key': API_KEY,
		'country_code': 'us',
		'url': url
	}

  1. Schicke dies payload zu ScraperAPI. Dieser Schritt ist so, als würde man ScraperAPI bitten, Homes.com in unserem Namen zu besuchen, aber mit dem zusätzlichen Vorteil des Geotargetings, das sicherstellt, dass wir uns auf Immobilien in Los Angeles konzentrieren, wie es US-Besucher tun würden.


	response = requests.get('https://api.scraperapi.com', params=payload)

Durch die Verwendung von ScraperAPI umgehen wir nicht nur potenzielle Scraping-Probleme, sondern stellen auch sicher, dass unsere Datenerfassung relevant und zielgerichtet ist.

Schritt 5: Parsen des Homes.com-HTML mit BeautifulSoup

Sobald wir eine erfolgreiche Antwort von ScraperAPI erhalten, ist es Zeit, den HTML-Code zu analysieren.

Jedes Mal, wenn wir die zehn Seiten durchgehen, properties_list greift auf die Einträge dieser Seite zu. Wir fügen diese ständig unserer Hauptimmobilienliste hinzu. Auf diese Weise, am Ende unserer Schleife, properties hat alle Einträge von jeder Seite und gibt uns so ein vollständiges Bild.


	if response.status_code == 200:
    soup = BeautifulSoup(response.content, 'html.parser')
    properties_list = soup.find_all('div', attrs={'class': 'for-rent-content-container'})
    properties += propertites_list 

Schritt 6: Homes.com-Eigenschaften in eine CSV-Datei exportieren

Nachdem wir nun erfolgreich die gewünschten Immobilieneinträge gesammelt haben, ist es an der Zeit, sie in einer CSV-Datei zu organisieren. Dieser Schritt stellt sicher, dass die Eigenschaftsinformationen für die Analyse oder Anwendungsnutzung leicht zugänglich sind.

Um zu beginnen, öffnen wir eine 'properties.csv' Datei zum Schreiben. Wir machen das mit Python csv.writerwas uns hilft, eine strukturierte CSV-Datei zum Speichern unserer Scraped-Daten zu erstellen.


	with open('properties.csv', 'w', newline='') as f:
    writer = csv.writer(f)

Verwendung der csv.writerrichten wir die Datei ein und definieren Spaltenüberschriften wie 'title', 'address'Und
'price'. Dadurch wird unsere Datei für die übersichtliche Speicherung der Immobilieninformationen vorbereitet.


	writer.writerow(('title', 'address', 'price', 'beds', 'baths', 'description', 'url'))

Von hier aus durchlaufen wir jede Eigenschaft in der Eigenschaftenliste. Wir verwenden BeautifulSoup, um Informationen aus jeder Eigenschaftsliste innerhalb dieser Schleife abzurufen und zu prüfen, ob jedes Element vorhanden ist. Wenn nicht, verwenden wir
'N/A' als Platzhalter, um Fehler zu vermeiden.

Wir suchen den Absatz <p> Element mit der Klasse
'property-name' um den Titel zu bekommen.


	title_elem = property.find('p', attrs={'class': 'property-name'})
	title = title_elem.text.strip() if title_elem else 'N/A'

Ebenso erhalten wir die Adresse von a <p> Tag mit der Klasse 'address'.


	address_elem = property.find('p', attrs={'class': 'address'})
	address = address_elem.text.strip() if address_elem else 'N/A'

Der <ul> Element mit dem
'detailed-info-container' Die Klasse enthält eine Liste mit Details, wie wir bei der HTML-Inspektion gesehen haben. Daraus extrahieren wir die Listenelemente für Preis, Betten und Bäder.


	info_container = property.find('ul', class_='detailed-info-container')
	extra_info = info_container.find_all('li') if info_container else ()
	price = extra_info(0).text.strip() if len(extra_info) > 0 else 'N/A'
	beds = extra_info(1).text.strip() if len(extra_info) > 1 else 'N/A'
	baths = extra_info(2).text.strip() if len(extra_info) > 2 else 'N/A'

Wir extrahieren die Beschreibung aus dem <p> Tag mit der Klasse 'property-description'.


	description_elem = property.find('p', attrs={'class': 'property-description'})
	description = description_elem.text.strip() if description_elem else 'N/A'

Wir erhalten die URL aus dem href-Attribut des <a> Tag und hängen Sie es an die BASE_URL für einen vollständigen Link.


	url_elem = property.find('a')
	url = BASE_URL + url_elem.get('href') if url_elem else 'N/A'

Notiz: Dieser Schritt ist wichtig, da die im HTML angezeigte URL fragmentiert ist. Mit anderen Worten: Ohne Anhängen würden Sie nicht die vollständige URL erhalten BASE_URL zum Auszugslink.

Auswählen eines href-Attributs eines a-TagsAuswählen eines href-Attributs eines a-Tags

Sobald wir alle benötigten Details aus jeder Eigenschaft extrahiert haben, schreiben wir sie als neue Zeile in unsere CSV-Datei. Auf diese Weise werden die Informationen zu jeder Immobilie in einem organisierten und zugänglichen Format gespeichert.


	writer.writerow((title, address, price, beds, baths, description, url))

Schritt 7: Fehlerbehandlung und letzte Handgriffe

Innerhalb unserer Schleife verwenden wir a try-except blockieren, um alle Ausnahmen während des abzufangen get() Anfrage an ScraperAPI. Dadurch wird sichergestellt, dass unser Skript nicht abstürzt, wenn eine Anfrage fehlschlägt.


	try:
    response = requests.get('https://api.scraperapi.com', params=payload)
    # Further processing
except requests.RequestException as e:
    print(f"Request failed on page {page}: {e}")

Wir überprüfen auch den Antwortstatus, bevor wir den HTML-Code analysieren. Wenn der Statuscode nicht vorhanden ist 200 (Erfolg), wir geben eine Fehlermeldung aus und überspringen das Parsen für diese Seite.


	if response.status_code == 200:
    # Parse HTML
else:
    print(f"Error on page {page}: Received status code {response.status_code}")

Abschließend schließen wir unser Skript mit einer Abschlussmeldung ab.


	print(f"Scraping completed. Collected data for {len(properties)} properties.")

Mit diesem letzten Schritt bestätigen wir nicht nur, dass wir Homes.com erfolgreich gescrapt haben, sondern geben auch einen schnellen Einblick in die Datenmenge, die wir gescrapt haben, was es einfacher macht, die gescrapten Daten zu überprüfen und mit der weiteren Analyse oder Anwendung fortzufahren.

Zusammenfassung

Herzlichen Glückwunsch, Sie haben Ihren ersten Homes.com-Schaber erfolgreich gebaut!

Zusammenfassend haben Sie heute Folgendes gelernt:

  • Verwenden Sie Python und BeautifulSoup, um Immobiliendaten zu extrahieren

  • Exportieren Sie Immobiliendaten zur einfachen Analyse in eine CSV-Datei
  • Nutzen Sie ScraperAPI, um Anti-Scraping-Maßnahmen effektiv zu umgehen und unser Scraping auf regionsspezifische Daten zu konzentrieren

Scraping Homes.com ist von entscheidender Bedeutung, um auf dem dynamischen Immobilienmarkt die Nase vorn zu haben, sei es für Investitionsanalysen, Marktforschung oder die Entwicklung maßgeschneiderter Marketingstrategien.

Notiz: Die Selektoren in diesem Artikel wurden aufgrund ihrer aktuellen Genauigkeit ausgewählt und sollten gut funktionieren. Da sich Websites jedoch ändern, ist es ratsam, sie ab und zu zu überprüfen, um Fehler zu vermeiden. Wenn Sie Änderungen bemerken, passen Sie Ihr Skript einfach ein wenig an.

Wenn Sie Fragen haben, wenden Sie sich bitte an unser Support-Team – wir helfen Ihnen gerne weiter. Sie können auch unsere Dokumentation lesen, um mehr über die Besonderheiten von ScraperAPI zu erfahren.

Bis zum nächsten Mal, viel Spaß beim Schaben!

Related Posts

Hinterlasse einen Kommentar