Das Extrahieren von Immobilieninformationen aus Zillow kann eine perfekte Analyse für den Markt und Investitionen bieten. Dieser Beitrag zielt darauf ab, das Scrapen von Zillow-Immobilienangeboten mit Python zu erörtern, wobei der Schwerpunkt auf den wesentlichen Schritten und Richtlinien liegt. Dieser Leitfaden zeigt Ihnen, wie Sie Informationen von der Zillow-Website mithilfe von Bibliotheken wie requests und lxml abrufen können.
Bevor wir beginnen, müssen Sie sicherstellen, dass Sie Python auf Ihrem System installiert haben. Außerdem müssen Sie die folgenden Bibliotheken installieren:
pip install requests
pip install lxml
Um Daten von Zillow zu extrahieren, müssen Sie die Struktur der Webseite verstehen. Öffnen Sie eine Immobilienseite auf Zillow und untersuchen Sie die Elemente, die Sie auslesen möchten (z. B. Titel der Immobilie, geschätzter Mietpreis und Bewertungspreis).
Titel:
Preis Details:
Nun wollen wir HTTP-Anfragen senden. Zuerst müssen wir den HTML-Inhalt der Zillow-Seite abrufen. Wir verwenden die requests-Bibliothek, um eine HTTP-GET-Anfrage an die Ziel-URL zu senden. Außerdem werden wir die Header der Anfrage so einrichten, dass sie eine echte Browseranfrage imitieren, und Proxys verwenden, um IP-Sperren zu vermeiden.
import requests
# Definieren Sie die Ziel-URL für die Zillow-Eigenschaftsliste
url = "https://www.zillow.com/homedetails/1234-Main-St-Some-City-CA-90210/12345678_zpid/"
# Richten Sie die Anfrage-Header ein, um eine Browser-Anfrage zu imitieren
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-US,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
'sec-ch-ua-mobile': '?0',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'same-origin',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}
# Optional können Sie Proxys einrichten, um IP-Sperren zu vermeiden.
proxies = {
'http': 'http://username:password@your_proxy_address',
'https://username:password@your_proxy_address',
}
# Senden Sie die HTTP-GET-Anfrage mit Headern und Proxys
response = requests.get(url, headers=headers, proxies=proxies)
response.raise_for_status() # Ensure we got a valid response
Als nächstes müssen wir den HTML-Inhalt mit lxml analysieren. Wir verwenden die Funktion fromstring aus dem Modul lxml.html, um den HTML-Inhalt der Webseite in ein Element-Objekt zu parsen.
from lxml.html import fromstring
# Parsen des HTML-Inhalts mit lxml
parser = fromstring(response.text)
Jetzt extrahieren wir spezifische Datenpunkte wie den Titel der Immobilie, den geschätzten Mietpreis und den Schätzpreis mithilfe von XPath-Abfragen auf dem geparsten HTML-Inhalt.
# Extrahieren des Eigenschaftstitels mit XPath
title = ' '.join(parser.xpath('//h1[@class="Text-c11n-8-99-3__sc-aiai24-0 dFxMdJ"]/text()'))
# Extrahieren des geschätzten Mietpreises einer Immobilie mit XPath
rent_estimate_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-2]
# Extrahieren des Immobilienbewertungspreises mit XPath
assessment_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-1]
# Speichern Sie die extrahierten Daten in einem Wörterbuch
property_data = {
'title': title,
'Rent estimate price': rent_estimate_price,
'Assessment price': assessment_price
}
Abschließend speichern wir die extrahierten Daten zur weiteren Verarbeitung in einer JSON-Datei.
import json
# Definieren Sie den Namen der JSON-Ausgabedatei
output_file = 'zillow_properties.json'
# Öffnen Sie die Datei im Schreibmodus und geben Sie die Daten aus
with open(output_file, 'w') as f:
json.dump(all_properties, f, indent=4)
print(f"Scraped data saved to {output_file}")
Um mehrere Immobilienangebote abzurufen, werden wir eine Liste von URLs durchlaufen und den Datenextraktionsprozess für jede einzelne wiederholen.
# Liste der zu scrapender URLs
urls = [
"https://www.zillow.com/homedetails/1234-Main-St-Some-City-CA-90210/12345678_zpid/",
"https://www.zillow.com/homedetails/5678-Another-St-Some-City-CA-90210/87654321_zpid/"
]
# Liste zum Speichern von Daten für alle Eigenschaften
all_properties = []
for url in urls:
# Senden Sie die HTTP-GET-Anfrage mit Headern und Proxys
response = requests.get(url, headers=headers, proxies=proxies)
response.raise_for_status() # Ensure we got a valid response
# Parsen des HTML-Inhalts mit lxml
parser = fromstring(response.text)
# Daten mit XPath extrahieren
title = ' '.join(parser.xpath('//h1[@class="Text-c11n-8-99-3__sc-aiai24-0 dFxMdJ"]/text()'))
rent_estimate_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-2]
assessment_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-1]
# Speichern Sie die extrahierten Daten in einem Wörterbuch
property_data = {
'title': title,
'Rent estimate price': rent_estimate_price,
'Assessment price': assessment_price
}
# Anhängen der Eigenschaftsdaten an die Liste
all_properties.append(property_data)
Hier ist der vollständige Code, um Zillow-Eigentumsdaten abzurufen und in einer JSON-Datei zu speichern:
import requests
from lxml.html import fromstring
import json
# Definieren Sie die Ziel-URLs für Zillow-Immobilienangebote
urls = [
"https://www.zillow.com/homedetails/1234-Main-St-Some-City-CA-90210/12345678_zpid/",
"https://www.zillow.com/homedetails/5678-Another-St-Some-City-CA-90210/87654321_zpid/"
]
# Richten Sie die Anfrage-Header ein, um eine Browser-Anfrage zu imitieren
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-US,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
'sec-ch-ua-mobile': '?0',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'same-origin',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}
# Optional können Sie Proxys einrichten, um IP-Sperren zu vermeiden.
proxies = {
'http': 'http://username:password@your_proxy_address',
'https': 'https://username:password@your_proxy_address',
}
# Liste zum Speichern von Daten für alle Eigenschaften
all_properties = []
for url in urls:
try:
# Senden Sie die HTTP-GET-Anfrage mit Headern und Proxys
response = requests.get(url, headers=headers, proxies=proxies)
response.raise_for_status() # Ensure we got a valid response
# Parsen des HTML-Inhalts mit lxml
parser = fromstring(response.text)
# Daten mit XPath extrahieren
title = ' '.join(parser.xpath('//h1[@class="Text-c11n-8-99-3__sc-aiai24-0 dFxMdJ"]/text()'))
rent_estimate_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-2]
assessment_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-1]
# Speichern Sie die extrahierten Daten in einem Wörterbuch
property_data = {
'title': title,
'Rent estimate price': rent_estimate_price,
'Assessment price': assessment_price
}
# Anhängen der Eigenschaftsdaten an die Liste
all_properties.append(property_data)
except requests.exceptions.HTTPError as e:
print(f"HTTP error occurred: {e}")
except requests.exceptions.RequestException as e:
print(f"An error occurred: {e}")
# Definieren Sie den Namen der JSON-Ausgabedatei
output_file = 'zillow_properties.json'
# Öffnen Sie die Datei im Schreibmodus und geben Sie die Daten aus
with open(output_file, 'w') as f:
json.dump(all_properties, f, indent=4)
print(f"Scraped data saved to {output_file}")
Wenn Sie die Struktur von HTML-Seiten verstehen und leistungsstarke Bibliotheken wie Requests und lxml nutzen, können Sie effizient Immobiliendetails extrahieren. Der Einsatz von Proxys und rotierenden User-Agents ermöglicht es Ihnen, eine große Anzahl von Anfragen an Websites wie Zillow zu stellen, ohne Gefahr zu laufen, blockiert zu werden. Für diese Aktivitäten sind statische ISP-Proxys oder rotierende Wohn-Proxys die optimale Wahl.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.ru!
Bemerkungen: 0