{"id":44370,"date":"2026-05-13T21:04:47","date_gmt":"2026-05-13T21:04:47","guid":{"rendered":"https:\/\/floppydata.com\/nicht-kategorisiert\/wie-man-zillow-scrappt-eine-anleitung-die-funktioniert\/"},"modified":"2026-05-13T21:04:47","modified_gmt":"2026-05-13T21:04:47","slug":"how-to-scrape-zillow-a-guide-that-works","status":"publish","type":"post","link":"https:\/\/floppydata.com\/de\/blog\/how-to-scrape-zillow-a-guide-that-works\/","title":{"rendered":"Wie man Zillow scrappt: Eine Anleitung, die funktioniert"},"content":{"rendered":"<h2><strong>Einf\u00fchrung<\/strong><\/h2>\n<p>Als eine der f\u00fchrenden Immobilienplattformen in den USA ist Zillow eine Plattform, die viele Unternehmen f\u00fcr Immobiliendaten nutzen m\u00f6chten. Die Plattform wird derzeit rund <a href=\"https:\/\/www.businessofapps.com\/data\/zillow-statistics\/\" target=\"_blank\" rel=\"noopener\">243 Millionen Mal pro Monat besucht<\/a>, so dass sie nat\u00fcrlich eine gro\u00dfe Menge an n\u00fctzlichen Immobiliendaten enth\u00e4lt. <\/p>\n<p>Auf Reddit berichten Entwickler jedoch h\u00e4ufig, dass sie Schwierigkeiten haben, die Firewall von Zillow zu umgehen, oder dass sie permanent blockiert werden, wenn sie versuchen, die Daten zu scrapen. Wenn Sie gerade diese Erfahrung gemacht haben und nach einer stabilen Anleitung suchen, die funktioniert, lesen Sie weiter. <\/p>\n<p>In dieser Anleitung zeige ich Ihnen, wie Sie mit Python und einer einfachen Web-API wichtige Daten aus Zillow extrahieren k\u00f6nnen.<\/p>\n<h2><strong>Was ist Zillow Scraping?<\/strong><\/h2>\n<p>Beim Zillow Scraping werden \u00f6ffentlich verf\u00fcgbare Immobiliendaten von Zillow-Seiten gesammelt und in ein strukturiertes Format wie CSV oder JSON umgewandelt, das Sie f\u00fcr gesch\u00e4ftliche oder private Zwecke nutzen k\u00f6nnen.<\/p>\n<p>Anstatt ein Angebot nach dem anderen zu \u00f6ffnen, k\u00f6nnen Sie einen Scraper verwenden, um die wichtigsten Details aus den Such- und Detailseiten der Immobilienangebote zu ziehen.<\/p>\n<p><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone size-full wp-image-44250\" src=\"https:\/\/floppydata.com\/wp-content\/uploads\/2026\/05\/image3-3.png\" alt=\"Zillow Scraping\" width=\"1999\" height=\"1385\" srcset=\"https:\/\/floppydata.com\/wp-content\/uploads\/2026\/05\/image3-3.png 1999w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/05\/image3-3-300x208.png 300w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/05\/image3-3-1024x709.png 1024w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/05\/image3-3-768x532.png 768w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/05\/image3-3-1536x1064.png 1536w\" sizes=\"(max-width: 1999px) 100vw, 1999px\" \/><\/p>\n<p>Zwischen beiden Seiten k\u00f6nnen Sie herausziehen:<\/p>\n<ul>\n<li>Preis, Adresse, Betten, B\u00e4der, Quadratmeterzahl, Status und Tage auf dem Markt<\/li>\n<li>Sch\u00e4tzung und Miete Sch\u00e4tzung<\/li>\n<li>Fotos und Name des Maklers<\/li>\n<li>Preis- und Steuerhistorie<\/li>\n<\/ul>\n<h3><strong>Warum Zillow-Daten scrapen?<\/strong><\/h3>\n<p>Stellen Sie sich vor, Sie k\u00f6nnten auf aktuelle Immobilienangebote, Preisdetails und Marktanalysen zugreifen, ohne Hunderte von Zillow-Seiten manuell \u00f6ffnen zu m\u00fcssen.<\/p>\n<p>Das ist der wahre Wert des Scrappings von Zillow.<\/p>\n<p>Wenn Sie in den Bereichen Immobilien, Immobilieninvestitionen, Marktforschung, Lead-Generierung oder Preisanalyse arbeiten, verf\u00fcgt Zillow \u00fcber n\u00fctzliche \u00f6ffentliche Daten, mit denen Sie Trends schneller erkennen k\u00f6nnen.<\/p>\n<h2><strong>Warum ist Zillow so schwer zu kratzen?<\/strong><\/h2>\n<p>Zillow geht nicht so weit wie andere Plattformen, wenn es darum geht, Bots zu blockieren, aber es ist immer noch so aufgebaut, dass es Datenverkehr ausschlie\u00dft, der nicht menschlich aussieht.<\/p>\n<p>Die meisten Scraper scheitern aus zwei Gr\u00fcnden. Schauen wir uns beide an: <\/p>\n<h3><strong>PerimeterX Schutz<\/strong><\/h3>\n<p>Zillow verwendet PerimeterX, um Bot-Traffic in Echtzeit zu erkennen und zu blockieren. Wenn Ihr Scraper die falschen Header hat, von einer wenig vertrauensw\u00fcrdigen IP-Adresse kommt oder zu viele Anfragen zu schnell sendet, kann er markiert werden. <\/p>\n<p>Meistens f\u00fchrt diese Markierung zu einem CAPTCHA-R\u00e4tsel, das die meisten Scraper brechen w\u00fcrde. PerimeterX pr\u00fcft auch viele Signale, darunter Header, Browserverhalten, TLS-Fingerabdr\u00fccke, Anfragegeschwindigkeit und IP-Reputation. <\/p>\n<p>Wenn der Datenverkehr automatisiert ist, kann es sein, dass der Scraper nie die eigentlichen Angebotsdaten erreicht.<\/p>\n<p>Selbst wenn Sie die Seite also in einem Headless-Browser rendern, ist das keine Erfolgsgarantie. Sie brauchen immer noch hochwertige Proxys, saubere Sitzungen und ein realistisches Anfrageverhalten. <\/p>\n<p>Deshalb verwende ich lieber den Web Unlocker von Floppydata, um Zillow zu scrapen.<\/p>\n<h3><strong>Unstrukturiertes HTML und keine stabilen Selektoren<\/strong><\/h3>\n<p>Das Parsen von Zillow kann ebenso frustrierend sein wie das \u00dcberwinden der Abwehrmechanismen. Es gibt fast keine einheitlichen Klassennamen, IDs oder Datenattribute im Seitenquelltext. <\/p>\n<p>Einfach aussehende Elemente wie der Preis oder die Adresse sind in allgemeine &lt;div&gt; Tags verpackt oder haben \u00fcberhaupt keine Bezeichnungen.<\/p>\n<p>Noch schlimmer ist, dass sich Klassennamen h\u00e4ufig \u00e4ndern und keinem Muster folgen. Sie m\u00fcssen also einen flexiblen Abgleich verwenden (z.B. ein schl\u00fcsselwortbasiertes find() oder sogar regex), um Daten aus rohen Textknoten zu ziehen. <\/p>\n<p>Das macht Zillow zu einer der instabilsten Websites zum Scrapen, wenn Sie sich auf statische Selektoren verlassen.<\/p>\n<h2><strong>Extrahieren von Listing-Informationen aus Zillow mit Python<\/strong><\/h2>\n<p>F\u00fcr diese Anleitung w\u00e4hle ich die <a href=\"https:\/\/www.zillow.com\/boston-ma\/\" target=\"_blank\" rel=\"noopener\">Boston-Suchergebnisseite<\/a> von Zillow, die mehrere Immobilienangebote enth\u00e4lt. Von dort aus k\u00f6nnen wir Felder wie Preis, Adresse, Betten, B\u00e4der, Quadratmeterzahl, Status und Angebotslinks extrahieren. <\/p>\n<p><strong><em>Anmerkung:<\/em><\/strong><em>  Zillow-Seiten \u00e4ndern sich h\u00e4ufig. Wenn die Boston-Seite anders aussieht, wenn Sie dies lesen, gehen Sie zu Zillow, suchen Sie nach einer beliebigen Stadt oder Nachbarschaft, kopieren Sie die URL der Ergebnisse und ersetzen Sie sie im Code. <\/em><\/p>\n<p>Beginnen wir mit der Einrichtung:<\/p>\n<h3><strong>Voraussetzungen<\/strong><\/h3>\n<p>Bevor Sie beginnen, ben\u00f6tigen Sie drei Dinge:<\/p>\n<ul>\n<li><strong>Python 3.10 oder h\u00f6her<\/strong> auf Ihrem Rechner installiert<\/li>\n<li><strong>Ein Floppydata-Konto<\/strong> mit einem API-Schl\u00fcssel f\u00fcr den Web Unlocker<\/li>\n<li>Zwei Python-Bibliotheken: <strong>requests<\/strong> f\u00fcr HTTP-Aufrufe und <strong>beautifulsoup4<\/strong> f\u00fcr HTML-Parsing<\/li>\n<\/ul>\n<p>Wenn Sie noch kein Floppydata-Konto haben, melden Sie sich unter floppydata.com an und holen Sie sich Ihren<strong> API-Schl\u00fcssel<\/strong> aus dem<a href=\"https:\/\/app.floppydata.com\/tools\/scrape\"> Web Unlocker Dashboard<\/a>.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-44259\" src=\"https:\/\/floppydata.com\/wp-content\/uploads\/2026\/05\/image1-3.png\" alt=\"API-Schl\u00fcssel\" width=\"1336\" height=\"646\" srcset=\"https:\/\/floppydata.com\/wp-content\/uploads\/2026\/05\/image1-3.png 1336w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/05\/image1-3-300x145.png 300w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/05\/image1-3-1024x495.png 1024w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/05\/image1-3-768x371.png 768w\" sizes=\"(max-width: 1336px) 100vw, 1336px\" \/><\/p>\n<p>Neue Konten werden mit <strong>f\u00fcnf kostenlosen Scraps<\/strong> ausgeliefert, so dass Sie die gesamte Anleitung verfolgen k\u00f6nnen, ohne etwas zu bezahlen.<\/p>\n<p>Die Anforderungsbibliothek ist in der Regel vorinstalliert, aber Sie k\u00f6nnen auch einfach diesen Befehl ausf\u00fchren, um sicherzustellen, dass sie richtig installiert ist:<\/p>\n<div style=\"margin: 18px 0 26px 0;\">\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 16px 18px; margin: 0; font-size: 14px; line-height: 1.7;\"><code><span style=\"color: #9333ea;\">pip<\/span> <span style=\"color: #16a34a;\">install<\/span> requests beautifulsoup4<\/code><\/pre>\n<\/div>\n<p>Sobald dies geschehen ist, erstellen Sie einen neuen Projektordner und eine neue Datei:<\/p>\n<div style=\"margin: 18px 0 26px 0;\">\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 16px 18px; margin: 0; font-size: 14px; line-height: 1.7;\"><code><span style=\"color: #9333ea;\">mkdir<\/span> zillow-scraper\n<span style=\"color: #9333ea;\">cd<\/span> zillow-scraper\n<span style=\"color: #9333ea;\">touch<\/span> zillow_scraper.py<\/code><\/pre>\n<\/div>\n<p>Jetzt sind Sie bereit f\u00fcr den Einsatz.<\/p>\n<h3><strong>Senden der ersten Anfrage<\/strong><\/h3>\n<p>Das erste, was die meisten Leute versuchen, ist eine normale Python-Anfrage. Diese sieht normalerweise so aus: <\/p>\n<div style=\"margin: 20px 0 28px 0;\">\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code><span style=\"color: #ea580c;\">import<\/span> requests\n\n<span style=\"color: #0891b2;\">url<\/span> = <span style=\"color: #dc2626;\">\"https:\/\/www.zillow.com\/boston-ma\/\"<\/span>\n<span style=\"color: #0891b2;\">response<\/span> = <span style=\"color: #9333ea;\">requests.get<\/span>(<span style=\"color: #0891b2;\">url<\/span>)\n\n<span style=\"color: #9333ea;\">print<\/span>(<span style=\"color: #0891b2;\">response<\/span>.status_code)\n<span style=\"color: #9333ea;\">print<\/span>(<span style=\"color: #0891b2;\">response<\/span>.text)<\/code><\/pre>\n<\/div>\n<p>Aber als ich das getestet habe, hat es nicht einmal zwei Versuche gebraucht, denn meine erste Anfrage wurde blockiert. Ich erhielt eine 403-Antwort mit einer PerimeterX-Sperrseite: <\/p>\n<div style=\"margin: 20px 0 28px 0;\">\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code><span style=\"color: #16a34a;\">403<\/span>\n<span style=\"color: #9333ea;\">&lt;!DOCTYPE<\/span> <span style=\"color: #16a34a;\">html<\/span><span style=\"color: #9333ea;\">&gt;<\/span>\n<span style=\"color: #9333ea;\">&lt;html<\/span> <span style=\"color: #16a34a;\">lang=<\/span><span style=\"color: #dc2626;\">\"en\"<\/span><span style=\"color: #9333ea;\">&gt;<\/span>\n<span style=\"color: #9333ea;\">&lt;head&gt;<\/span>\n  <span style=\"color: #9333ea;\">&lt;meta<\/span> <span style=\"color: #16a34a;\">charset=<\/span><span style=\"color: #dc2626;\">\"utf-8\"<\/span><span style=\"color: #9333ea;\">&gt;<\/span>\n  <span style=\"color: #9333ea;\">&lt;meta<\/span> <span style=\"color: #16a34a;\">name=<\/span><span style=\"color: #dc2626;\">\"viewport\"<\/span> <span style=\"color: #16a34a;\">content=<\/span><span style=\"color: #dc2626;\">\"width=device-width, initial-scale=1\"<\/span><span style=\"color: #9333ea;\">&gt;<\/span>\n  <span style=\"color: #9333ea;\">&lt;meta<\/span> <span style=\"color: #16a34a;\">name=<\/span><span style=\"color: #dc2626;\">\"description\"<\/span> <span style=\"color: #16a34a;\">content=<\/span><span style=\"color: #dc2626;\">\"px-captcha\"<\/span><span style=\"color: #9333ea;\">&gt;<\/span>\n  <span style=\"color: #9333ea;\">&lt;title&gt;<\/span>Access to this page has been denied<span style=\"color: #9333ea;\">&lt;\/title&gt;<\/span>\n<span style=\"color: #9333ea;\">&lt;\/head&gt;<\/span><\/code><\/pre>\n<\/div>\n<p>Das ist das Problem beim direkten Scrapen von Zillow. Eine normale Python-Anfrage verh\u00e4lt sich nicht wie eine echte Browsing-Sitzung. Sie hat auch nicht den richtigen Browser-Fingerabdruck, die richtige IP-Qualit\u00e4t oder das richtige JavaScript-Rendering, so dass Zillow sie sofort erkennen und die Anfrage blockieren kann.  <\/p>\n<p>Deshalb baue ich den Haupt-Scraper nicht um direkte <strong>requests() <\/strong>-Aufrufe bei Zillow herum. Stattdessen sende ich meine Anfragen \u00fcber den Web Unlocker von Floppydata und \u00fcberlasse ihm die schwierigen Aufgaben. <\/p>\n<h2><strong>Scraping von Zillow mit Floppydata Web Unlocker<\/strong><\/h2>\n<p>Lassen Sie uns mit dem Web Unlocker eine Anfrage an die Suchseite senden. Zillow ist nicht das schwierigste Ziel f\u00fcr Scraping, aber es legt Wert auf IP-Reputation und Browserverhalten. <\/p>\n<p>An dieser Stelle kommt der Web Unlocker ins Spiel. Er leitet Ihre Anfrage \u00fcber eine vertrauensw\u00fcrdige private IP-Adresse weiter, wendet einen echten Browser-Fingerabdruck an und gibt das vollst\u00e4ndig gerenderte HTML zur\u00fcck. <\/p>\n<p>Eine Sache, die ich an Floppydata sehr sch\u00e4tze, ist, dass Sie nur f\u00fcr erfolgreiche Anfragen bezahlen. Wenn ein Scrape fehlschl\u00e4gt, wird er nicht auf Ihre Nutzung angerechnet. <\/p>\n<p>Das Dashboard zeigt auch Echtzeit-Analysen der Anfragen an, so dass Sie Ihre Nutzung, Erfolgsquoten und verbleibenden Credits verfolgen k\u00f6nnen, ohne die Seite zu verlassen.<\/p>\n<p><img decoding=\"async\" class=\"alignnone size-full wp-image-44268\" src=\"https:\/\/floppydata.com\/wp-content\/uploads\/2026\/05\/image4-4.png\" alt=\"Floppydata Web Unlocker  \" width=\"1999\" height=\"1129\"><\/p>\n<p>Bevor ich irgendeinen Code schreibe, teste ich die Ziel-URL gerne zuerst mit dem no-code<a href=\"https:\/\/app.floppydata.com\/tools\/scrape\"> Web Unlocker <\/a>. So kann ich die HTML-Antwort sehen, bevor ich einen Parser erstelle. So wei\u00df ich genau, welche Selektoren und Daten ich erwarten kann. <\/p>\n<p>Die Verwendung des Web Unlocker Tools ist buchst\u00e4blich so einfach wie das ABC. \u00d6ffnen Sie einfach den <a href=\"https:\/\/app.floppydata.com\/tools\/scrape\">Web Unlocker<\/a> von Ihrem Floppydata Dashboard aus. F\u00fcgen Sie dann diese URL<a href=\"https:\/\/www.zillow.com\/boston-ma\/\" target=\"_blank\" rel=\"noopener\">&#8222;https:\/\/www.zillow.com\/boston-ma\/&#8220;<\/a> ein, klicken Sie auf die Schaltfl\u00e4che <strong>Scrape <\/strong>und warten Sie ein paar Sekunden  <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-44278\" src=\"https:\/\/floppydata.com\/wp-content\/uploads\/2026\/05\/image2-3.png\" alt=\"Web Unlocker\" width=\"1159\" height=\"881\" srcset=\"https:\/\/floppydata.com\/wp-content\/uploads\/2026\/05\/image2-3.png 1159w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/05\/image2-3-300x228.png 300w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/05\/image2-3-1024x778.png 1024w, https:\/\/floppydata.com\/wp-content\/uploads\/2026\/05\/image2-3-768x584.png 768w\" sizes=\"(max-width: 1159px) 100vw, 1159px\" \/><\/p>\n<p>Sobald das Scrapen abgeschlossen ist, sehen Sie sich das <strong>Output-Vorschaufenster<\/strong> unten an. Sie sollten die vollst\u00e4ndige HTML-Seite mit unseren Zillow-Suchergebnissen sehen. <\/p>\n<p>Wenn die Daten gut aussehen, verwenden Sie <strong>Copy HTML<\/strong>, um sie zu \u00fcbernehmen, oder <strong>Download<\/strong>, um die Datei lokal zu speichern.<\/p>\n<h3><strong>Verstehen Sie die Paginierungsstruktur von Zillow<\/strong><\/h3>\n<p>Die Ausgabevorschau liefert rohes HTML, was n\u00fctzlich ist, da ich die genaue Struktur \u00fcberpr\u00fcfen kann, bevor ich den Code schreibe.<\/p>\n<p>Dies ist vergleichbar mit dem \u00d6ffnen der Browser-Entwicklertools durch Dr\u00fccken von <strong>F12<\/strong> und dem direkten Inspizieren der Seite. In der heruntergeladenen HTML-Datei habe ich eine wichtige Sache gefunden, die den Parser wesentlich einfacher macht. <\/p>\n<p>In den meisten Anleitungen wird Ihnen empfohlen, die Auflistungskarten mit CSS-Selektoren zu erfassen, aber Zillow stellt nur 9 Karten im Seitenaufbau dar. Die anderen 32 werden beim Scrollen geladen, so dass beim Scraping mit CSS-Selektoren die meisten Daten verloren gehen. <\/p>\n<p>Vielmehr befinden sich die Suchergebnisse in einem gro\u00dfen JSON-Objekt in der HTML-Seite. Dieses JSON befindet sich in diesem Skript-Tag: <\/p>\n<div style=\"margin: 20px 0 28px 0;\">\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code><span style=\"color: #9333ea;\">&lt;script<\/span> <span style=\"color: #16a34a;\">id=<\/span><span style=\"color: #dc2626;\">\"__NEXT_DATA__\"<\/span> <span style=\"color: #16a34a;\">type=<\/span><span style=\"color: #dc2626;\">\"application\/json\"<\/span><span style=\"color: #9333ea;\">&gt;<\/span><\/code><\/pre>\n<\/div>\n<p>Die Seite verwendet dieses JSON, um die Daten auf dem Frontend zu laden, und wir k\u00f6nnen es ebenfalls lesen. In diesem JSON befinden sich die Eintr\u00e4ge genau unter diesem Pfad: <\/p>\n<div style=\"margin: 20px 0 28px 0;\">\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code><span style=\"color: #0891b2;\">data<\/span>[<span style=\"color: #dc2626;\">\"props\"<\/span>][<span style=\"color: #dc2626;\">\"pageProps\"<\/span>][<span style=\"color: #dc2626;\">\"searchPageState\"<\/span>][<span style=\"color: #dc2626;\">\"cat1\"<\/span>][<span style=\"color: #dc2626;\">\"searchResults\"<\/span>][<span style=\"color: #dc2626;\">\"listResults\"<\/span>]<\/code><\/pre>\n<\/div>\n<p>Unser Parsing-Plan ist also einfach.<\/p>\n<p>Wir finden das Skript <strong>__NEXT_DATA__ <\/strong>mit BeautifulSoup, parsen das JSON, gehen in das Array <strong>listResults<\/strong> und ziehen die Felder, die wir brauchen.<\/p>\n<h2><strong>Zillow Web Scraping mit Python und Web Unlocker<\/strong><\/h2>\n<p>Jetzt k\u00f6nnen wir vom Dashboard zum Code \u00fcbergehen.<\/p>\n<p>Das Dashboard-Snippet verwendet <strong>httpx<\/strong>, aber ich werde hier <strong>requests<\/strong> verwenden, weil es den meisten Python-Lesern vertrauter ist.<\/p>\n<h3><strong>Schritt 1: Erstellen Sie die Anfrage<\/strong><\/h3>\n<p>Lassen Sie uns mit der Grundkonfiguration beginnen. Wir ben\u00f6tigen den Web Unlocker Endpunkt, unseren API-Schl\u00fcssel und die Ziel-URL von Zillow: <\/p>\n<div style=\"margin: 20px 0 28px 0;\">\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code><span style=\"color: #ea580c;\">import<\/span> requests\n<span style=\"color: #ea580c;\">import<\/span> json\n<span style=\"color: #ea580c;\">from<\/span> bs4 <span style=\"color: #ea580c;\">import<\/span> BeautifulSoup\n\n<span style=\"color: #0891b2;\">API_URL<\/span> = <span style=\"color: #dc2626;\">\"https:\/\/client-api.floppy.host\/v1\/webUnlocker\"<\/span>\n<span style=\"color: #0891b2;\">API_KEY<\/span> = <span style=\"color: #dc2626;\">\"YOUR_API_KEY\"<\/span>\n<span style=\"color: #0891b2;\">SEARCH_URL<\/span> = <span style=\"color: #dc2626;\">\"https:\/\/www.zillow.com\/boston-ma\/\"<\/span>\n\n<span style=\"color: #0891b2;\">SEARCH_URL<\/span> = <span style=\"color: #dc2626;\">\"live_zillow_boston.json\"<\/span><\/code><\/pre>\n<\/div>\n<p><em>Ersetzen Sie <\/em><strong><em>IHR_API_KEY<\/em><\/strong><em> durch den Schl\u00fcssel aus Ihrem Floppydata Dashboard.<\/em><\/p>\n<p>Ich verwende hier Boston als Zielmarkt, aber wenn Sie eine andere Stadt scrapen m\u00f6chten, ersetzen Sie einfach die Such-URL.<\/p>\n<h3><strong>Schritt 2: Holen Sie die Seite \u00fcber Web Unlocker<\/strong><\/h3>\n<p>Der Web Unlocker nimmt einen JSON-Payload mit der Ziel-URL und ein paar Optionen entgegen. Er gibt eine JSON-Antwort zur\u00fcck, die das gerenderte HTML in einem <strong>HTML-Feld<\/strong> enth\u00e4lt: <\/p>\n<p>Jetzt erstelle ich eine Funktion <strong>fetch_html()<\/strong>, um die Zillow-URL an Web Unlocker zu senden und das gerenderte HTML zur\u00fcckzugeben<\/p>\n<div style=\"margin: 20px 0 28px 0;\">\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code><span style=\"color: #ea580c;\">def<\/span> <span style=\"color: #9333ea;\">fetch_html<\/span>(<span style=\"color: #0891b2;\">url<\/span>):\n    <span style=\"color: #0891b2;\">response<\/span> = <span style=\"color: #9333ea;\">requests.post<\/span>(\n        <span style=\"color: #0891b2;\">API_URL<\/span>,\n        headers={\n            <span style=\"color: #dc2626;\">\"Content-Type\"<\/span>: <span style=\"color: #dc2626;\">\"application\/json\"<\/span>,\n            <span style=\"color: #dc2626;\">\"X-Api-Key\"<\/span>: <span style=\"color: #0891b2;\">API_KEY<\/span>,\n        },\n        json={\n            <span style=\"color: #dc2626;\">\"url\"<\/span>: <span style=\"color: #0891b2;\">url<\/span>,\n            <span style=\"color: #dc2626;\">\"country\"<\/span>: <span style=\"color: #dc2626;\">\"US\"<\/span>,\n            <span style=\"color: #dc2626;\">\"city\"<\/span>: <span style=\"color: #dc2626;\">\"Boston\"<\/span>,\n            <span style=\"color: #dc2626;\">\"difficulty\"<\/span>: <span style=\"color: #dc2626;\">\"medium\"<\/span>,\n            <span style=\"color: #dc2626;\">\"expiration\"<\/span>: <span style=\"color: #16a34a;\">0<\/span>,\n        },\n        timeout=<span style=\"color: #16a34a;\">120<\/span>,\n    )\n    <span style=\"color: #0891b2;\">response<\/span>.<span style=\"color: #9333ea;\">raise_for_status<\/span>()\n\n    <span style=\"color: #0891b2;\">data<\/span> = <span style=\"color: #0891b2;\">response<\/span>.<span style=\"color: #9333ea;\">json<\/span>()\n    <span style=\"color: #0891b2;\">html<\/span> = <span style=\"color: #0891b2;\">data<\/span>.<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"html\"<\/span>)\n\n    <span style=\"color: #ea580c;\">if<\/span> <span style=\"color: #ea580c;\">not<\/span> <span style=\"color: #0891b2;\">html<\/span>:\n        <span style=\"color: #ea580c;\">raise<\/span> <span style=\"color: #9333ea;\">ValueError<\/span>(<span style=\"color: #dc2626;\">\"Unlocker response did not include an 'html' field.\"<\/span>)\n\n    <span style=\"color: #ea580c;\">return<\/span> <span style=\"color: #0891b2;\">html<\/span><\/code><\/pre>\n<\/div>\n<p>Hier geschehen einige Dinge. Die Felder <strong>Land<\/strong> und <strong>Stadt<\/strong> helfen, die Anfrage besser auf den Zielort abzustimmen. Ich habe die <strong>Schwierigkeit: &#8222;mittel&#8220;<\/strong>, weil Zillow keine einfache statische Seite ist und daher einen st\u00e4rkeren Entsperrungsprozess ben\u00f6tigt.  <\/p>\n<p>Das Feld <strong>expiration<\/strong> ist auf <strong>0<\/strong> gesetzt, so dass ich eine neue Antwort erhalte. Nachdem die Anfrage erfolgreich war, gibt Web Unlocker eine JSON-Antwort zur\u00fcck, und der gerenderte HTML-Code befindet sich im <strong>html-Feld<\/strong>. <\/p>\n<h3><strong>Schritt 3: Extrahieren Sie die Inserate<\/strong><\/h3>\n<p>Jetzt k\u00f6nnen wir den Parsing-Plan von vorhin anwenden. Ich werde eine Funktion <strong>extract_listings()<\/strong> erstellen. Diese Funktion nimmt den HTML-Code, findet die JSON-Daten von Zillow und extrahiert die Angebote:  <\/p>\n<div style=\"margin: 20px 0 28px 0;\">\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code><span style=\"color: #ea580c;\">def<\/span> <span style=\"color: #9333ea;\">extract_listings<\/span>(<span style=\"color: #0891b2;\">html<\/span>):\n    <span style=\"color: #0891b2;\">soup<\/span> = <span style=\"color: #9333ea;\">BeautifulSoup<\/span>(<span style=\"color: #0891b2;\">html<\/span>, <span style=\"color: #dc2626;\">\"html.parser\"<\/span>)\n    <span style=\"color: #0891b2;\">next_data<\/span> = <span style=\"color: #0891b2;\">soup<\/span>.<span style=\"color: #9333ea;\">find<\/span>(<span style=\"color: #dc2626;\">\"script\"<\/span>, id=<span style=\"color: #dc2626;\">\"__NEXT_DATA__\"<\/span>)\n\n    <span style=\"color: #ea580c;\">if<\/span> <span style=\"color: #ea580c;\">not<\/span> <span style=\"color: #0891b2;\">next_data<\/span> <span style=\"color: #ea580c;\">or<\/span> <span style=\"color: #ea580c;\">not<\/span> <span style=\"color: #0891b2;\">next_data<\/span>.string:\n        <span style=\"color: #ea580c;\">raise<\/span> <span style=\"color: #9333ea;\">ValueError<\/span>(<span style=\"color: #dc2626;\">\"Could not find Zillow's __NEXT_DATA__ script.\"<\/span>)\n\n    <span style=\"color: #0891b2;\">data<\/span> = <span style=\"color: #9333ea;\">json.loads<\/span>(<span style=\"color: #0891b2;\">next_data<\/span>.string)\n    <span style=\"color: #0891b2;\">search_state<\/span> = <span style=\"color: #0891b2;\">data<\/span>.<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"props\"<\/span>, {}).<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"pageProps\"<\/span>, {}).<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"searchPageState\"<\/span>, {})\n    <span style=\"color: #0891b2;\">list_results<\/span> = (\n        <span style=\"color: #0891b2;\">search_state<\/span>.<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"cat1\"<\/span>, {})\n        .<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"searchResults\"<\/span>, {})\n        .<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"listResults\"<\/span>, [])\n    )\n\n    <span style=\"color: #0891b2;\">listings<\/span> = []\n\n    <span style=\"color: #ea580c;\">for<\/span> <span style=\"color: #0891b2;\">item<\/span> <span style=\"color: #ea580c;\">in<\/span> <span style=\"color: #0891b2;\">list_results<\/span>:\n        <span style=\"color: #0891b2;\">listings<\/span>.<span style=\"color: #9333ea;\">append<\/span>(\n            {\n                <span style=\"color: #dc2626;\">\"zpid\"<\/span>: <span style=\"color: #0891b2;\">item<\/span>.<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"zpid\"<\/span>),\n                <span style=\"color: #dc2626;\">\"address\"<\/span>: <span style=\"color: #0891b2;\">item<\/span>.<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"address\"<\/span>),\n                <span style=\"color: #dc2626;\">\"price\"<\/span>: <span style=\"color: #0891b2;\">item<\/span>.<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"price\"<\/span>),\n                <span style=\"color: #dc2626;\">\"beds\"<\/span>: <span style=\"color: #0891b2;\">item<\/span>.<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"beds\"<\/span>),\n                <span style=\"color: #dc2626;\">\"baths\"<\/span>: <span style=\"color: #0891b2;\">item<\/span>.<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"baths\"<\/span>),\n                <span style=\"color: #dc2626;\">\"sqft\"<\/span>: <span style=\"color: #0891b2;\">item<\/span>.<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"area\"<\/span>),\n                <span style=\"color: #dc2626;\">\"status\"<\/span>: <span style=\"color: #0891b2;\">item<\/span>.<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"statusType\"<\/span>),\n                <span style=\"color: #dc2626;\">\"url\"<\/span>: <span style=\"color: #0891b2;\">item<\/span>.<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"detailUrl\"<\/span>),\n            }\n        )\n\n    <span style=\"color: #ea580c;\">return<\/span> <span style=\"color: #0891b2;\">listings<\/span><\/code><\/pre>\n<\/div>\n<p>Mit BeautifulSoup kann ich ganz einfach direkt auf das strukturierte JSON innerhalb der Seite zugreifen. Dann habe ich den Skriptinhalt als JSON geparst und das Array <strong>listResults<\/strong> erhalten. <\/p>\n<p>Jedes Element in listResults ist eine Auflistung einer Immobilie, und aus jeder Auflistung k\u00f6nnen wir wertvolle Daten sammeln, wie z.B.:<\/p>\n<ul>\n<li>Adresse<\/li>\n<li>Preis<\/li>\n<li>Betten<\/li>\n<li>B\u00e4der<\/li>\n<li>Bereich<\/li>\n<li>statusType<\/li>\n<li>detailUrl<\/li>\n<\/ul>\n<p>In der endg\u00fcltigen Ausgabe habe ich die Fl\u00e4che in sqft umbenannt, weil das einfacher zu verstehen ist.<\/p>\n<h3><strong>Schritt 4: Speichern Sie die Ergebnisse in einer JSON-Datei<\/strong><\/h3>\n<p>Schlie\u00dflich k\u00f6nnen wir eine <strong>main()<\/strong> -Funktion hinzuf\u00fcgen, um den Scraper auszuf\u00fchren und die Ausgabe in einer JSON-Datei zu speichern: <\/p>\n<div style=\"margin: 20px 0 28px 0;\">\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code><span style=\"color: #ea580c;\">def<\/span> <span style=\"color: #9333ea;\">main<\/span>():\n    <span style=\"color: #9333ea;\">print<\/span>(<span style=\"color: #dc2626;\">f\"Fetching data from: {<span style=\"color: #0891b2;\">SEARCH_URL<\/span>}\"<\/span>)\n    <span style=\"color: #0891b2;\">html<\/span> = <span style=\"color: #9333ea;\">fetch_html<\/span>(<span style=\"color: #0891b2;\">SEARCH_URL<\/span>)\n    <span style=\"color: #0891b2;\">listings<\/span> = <span style=\"color: #9333ea;\">extract_listings<\/span>(<span style=\"color: #0891b2;\">html<\/span>)\n\n    <span style=\"color: #ea580c;\">if<\/span> <span style=\"color: #ea580c;\">not<\/span> <span style=\"color: #0891b2;\">listings<\/span>:\n        <span style=\"color: #ea580c;\">raise<\/span> <span style=\"color: #9333ea;\">SystemExit<\/span>(<span style=\"color: #dc2626;\">\"No listings found in Zillow's JSON data.\"<\/span>)\n\n    <span style=\"color: #ea580c;\">with<\/span> <span style=\"color: #9333ea;\">open<\/span>(<span style=\"color: #0891b2;\">OUTPUT_FILE<\/span>, <span style=\"color: #dc2626;\">\"w\"<\/span>, encoding=<span style=\"color: #dc2626;\">\"utf-8\"<\/span>) <span style=\"color: #ea580c;\">as<\/span> <span style=\"color: #0891b2;\">file<\/span>:\n        <span style=\"color: #9333ea;\">json.dump<\/span>(<span style=\"color: #0891b2;\">listings<\/span>, <span style=\"color: #0891b2;\">file<\/span>, indent=<span style=\"color: #16a34a;\">2<\/span>)\n\n    <span style=\"color: #9333ea;\">print<\/span>(<span style=\"color: #dc2626;\">f\"Found {<span style=\"color: #9333ea;\">len<\/span>(<span style=\"color: #0891b2;\">listings<\/span>)} listings\"<\/span>)\n    <span style=\"color: #9333ea;\">print<\/span>(<span style=\"color: #dc2626;\">f\"Saved results to {<span style=\"color: #0891b2;\">OUTPUT_FILE<\/span>}\"<\/span>)<\/code><\/pre>\n<\/div>\n<p>Diese Funktion ruft die Seite ab, extrahiert die Listen, pr\u00fcft, ob die Liste nicht leer ist, und speichert alles in einer JSON-Datei. Wenn die Daten gut aussehen, k\u00f6nnen wir sie sp\u00e4ter in eine CSV-Datei konvertieren oder die Daten direkt in unseren Anwendungen verwenden. <\/p>\n<h3><strong>Das vollst\u00e4ndige Skript<\/strong><\/h3>\n<p>Hier ist der gesamte Code, den ich verwendet habe, um meine Zillow-Listings erfolgreich zu extrahieren:<\/p>\n<div style=\"margin: 20px 0 28px 0;\">\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code><span style=\"color: #ea580c;\">from<\/span> bs4 <span style=\"color: #ea580c;\">import<\/span> BeautifulSoup\n<span style=\"color: #ea580c;\">import<\/span> requests\n<span style=\"color: #ea580c;\">import<\/span> json\n\n<span style=\"color: #0891b2;\">API_URL<\/span> = <span style=\"color: #dc2626;\">\"https:\/\/client-api.floppy.host\/v1\/webUnlocker\"<\/span>\n<span style=\"color: #0891b2;\">API_KEY<\/span> = <span style=\"color: #dc2626;\">\"Your_API_KEY\"<\/span>\n<span style=\"color: #0891b2;\">SEARCH_URL<\/span> = <span style=\"color: #dc2626;\">\"https:\/\/www.zillow.com\/boston-ma\/\"<\/span>\n<span style=\"color: #0891b2;\">OUTPUT_FILE<\/span> = <span style=\"color: #dc2626;\">\"live_zillow_boston.json\"<\/span>\n\n\n<span style=\"color: #ea580c;\">def<\/span> <span style=\"color: #9333ea;\">fetch_html<\/span>(<span style=\"color: #0891b2;\">url<\/span>):\n    <span style=\"color: #0891b2;\">response<\/span> = <span style=\"color: #9333ea;\">requests.post<\/span>(\n        <span style=\"color: #0891b2;\">API_URL<\/span>,\n        headers={\n            <span style=\"color: #dc2626;\">\"Content-Type\"<\/span>: <span style=\"color: #dc2626;\">\"application\/json\"<\/span>,\n            <span style=\"color: #dc2626;\">\"X-Api-Key\"<\/span>: <span style=\"color: #0891b2;\">API_KEY<\/span>,\n        },\n        json={\n            <span style=\"color: #dc2626;\">\"url\"<\/span>: <span style=\"color: #0891b2;\">url<\/span>,\n            <span style=\"color: #dc2626;\">\"country\"<\/span>: <span style=\"color: #dc2626;\">\"US\"<\/span>,\n            <span style=\"color: #dc2626;\">\"city\"<\/span>: <span style=\"color: #dc2626;\">\"Boston\"<\/span>,\n            <span style=\"color: #dc2626;\">\"difficulty\"<\/span>: <span style=\"color: #dc2626;\">\"medium\"<\/span>,\n            <span style=\"color: #dc2626;\">\"expiration\"<\/span>: <span style=\"color: #16a34a;\">0<\/span>,\n        },\n        timeout=<span style=\"color: #16a34a;\">120<\/span>,\n    )\n    <span style=\"color: #0891b2;\">response<\/span>.<span style=\"color: #9333ea;\">raise_for_status<\/span>()\n\n    <span style=\"color: #0891b2;\">data<\/span> = <span style=\"color: #0891b2;\">response<\/span>.<span style=\"color: #9333ea;\">json<\/span>()\n    <span style=\"color: #0891b2;\">html<\/span> = <span style=\"color: #0891b2;\">data<\/span>.<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"html\"<\/span>)\n\n    <span style=\"color: #ea580c;\">if<\/span> <span style=\"color: #ea580c;\">not<\/span> <span style=\"color: #0891b2;\">html<\/span>:\n        <span style=\"color: #ea580c;\">raise<\/span> <span style=\"color: #9333ea;\">ValueError<\/span>(<span style=\"color: #dc2626;\">\"Unlocker response did not include an 'html' field.\"<\/span>)\n\n    <span style=\"color: #ea580c;\">return<\/span> <span style=\"color: #0891b2;\">html<\/span>\n\n\n<span style=\"color: #ea580c;\">def<\/span> <span style=\"color: #9333ea;\">extract_listings<\/span>(<span style=\"color: #0891b2;\">html<\/span>):\n    <span style=\"color: #0891b2;\">soup<\/span> = <span style=\"color: #9333ea;\">BeautifulSoup<\/span>(<span style=\"color: #0891b2;\">html<\/span>, <span style=\"color: #dc2626;\">\"html.parser\"<\/span>)\n    <span style=\"color: #0891b2;\">next_data<\/span> = <span style=\"color: #0891b2;\">soup<\/span>.<span style=\"color: #9333ea;\">find<\/span>(<span style=\"color: #dc2626;\">\"script\"<\/span>, id=<span style=\"color: #dc2626;\">\"__NEXT_DATA__\"<\/span>)\n\n    <span style=\"color: #ea580c;\">if<\/span> <span style=\"color: #ea580c;\">not<\/span> <span style=\"color: #0891b2;\">next_data<\/span> <span style=\"color: #ea580c;\">or<\/span> <span style=\"color: #ea580c;\">not<\/span> <span style=\"color: #0891b2;\">next_data<\/span>.string:\n        <span style=\"color: #ea580c;\">raise<\/span> <span style=\"color: #9333ea;\">ValueError<\/span>(<span style=\"color: #dc2626;\">\"Could not find Zillow's __NEXT_DATA__ script.\"<\/span>)\n\n    <span style=\"color: #0891b2;\">data<\/span> = <span style=\"color: #9333ea;\">json.loads<\/span>(<span style=\"color: #0891b2;\">next_data<\/span>.string)\n    <span style=\"color: #0891b2;\">search_state<\/span> = <span style=\"color: #0891b2;\">data<\/span>.<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"props\"<\/span>, {}).<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"pageProps\"<\/span>, {}).<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"searchPageState\"<\/span>, {})\n    <span style=\"color: #0891b2;\">list_results<\/span> = (\n        <span style=\"color: #0891b2;\">search_state<\/span>.<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"cat1\"<\/span>, {})\n        .<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"searchResults\"<\/span>, {})\n        .<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"listResults\"<\/span>, [])\n    )\n\n    <span style=\"color: #0891b2;\">listings<\/span> = []\n\n    <span style=\"color: #ea580c;\">for<\/span> <span style=\"color: #0891b2;\">item<\/span> <span style=\"color: #ea580c;\">in<\/span> <span style=\"color: #0891b2;\">list_results<\/span>:\n        <span style=\"color: #0891b2;\">listings<\/span>.<span style=\"color: #9333ea;\">append<\/span>(\n            {\n                <span style=\"color: #dc2626;\">\"zpid\"<\/span>: <span style=\"color: #0891b2;\">item<\/span>.<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"zpid\"<\/span>),\n                <span style=\"color: #dc2626;\">\"address\"<\/span>: <span style=\"color: #0891b2;\">item<\/span>.<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"address\"<\/span>),\n                <span style=\"color: #dc2626;\">\"price\"<\/span>: <span style=\"color: #0891b2;\">item<\/span>.<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"price\"<\/span>),\n                <span style=\"color: #dc2626;\">\"beds\"<\/span>: <span style=\"color: #0891b2;\">item<\/span>.<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"beds\"<\/span>),\n                <span style=\"color: #dc2626;\">\"baths\"<\/span>: <span style=\"color: #0891b2;\">item<\/span>.<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"baths\"<\/span>),\n                <span style=\"color: #dc2626;\">\"sqft\"<\/span>: <span style=\"color: #0891b2;\">item<\/span>.<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"area\"<\/span>),\n                <span style=\"color: #dc2626;\">\"status\"<\/span>: <span style=\"color: #0891b2;\">item<\/span>.<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"statusType\"<\/span>),\n                <span style=\"color: #dc2626;\">\"url\"<\/span>: <span style=\"color: #0891b2;\">item<\/span>.<span style=\"color: #9333ea;\">get<\/span>(<span style=\"color: #dc2626;\">\"detailUrl\"<\/span>),\n            }\n        )\n\n    <span style=\"color: #ea580c;\">return<\/span> <span style=\"color: #0891b2;\">listings<\/span>\n\n\n<span style=\"color: #ea580c;\">def<\/span> <span style=\"color: #9333ea;\">main<\/span>():\n    <span style=\"color: #9333ea;\">print<\/span>(<span style=\"color: #dc2626;\">f\"Fetching data from: {<span style=\"color: #0891b2;\">SEARCH_URL<\/span>}\"<\/span>)\n    <span style=\"color: #0891b2;\">html<\/span> = <span style=\"color: #9333ea;\">fetch_html<\/span>(<span style=\"color: #0891b2;\">SEARCH_URL<\/span>)\n    <span style=\"color: #0891b2;\">listings<\/span> = <span style=\"color: #9333ea;\">extract_listings<\/span>(<span style=\"color: #0891b2;\">html<\/span>)\n\n    <span style=\"color: #ea580c;\">if<\/span> <span style=\"color: #ea580c;\">not<\/span> <span style=\"color: #0891b2;\">listings<\/span>:\n        <span style=\"color: #ea580c;\">raise<\/span> <span style=\"color: #9333ea;\">SystemExit<\/span>(<span style=\"color: #dc2626;\">\"No listings found in Zillow's JSON data.\"<\/span>)\n\n    <span style=\"color: #ea580c;\">with<\/span> <span style=\"color: #9333ea;\">open<\/span>(<span style=\"color: #0891b2;\">OUTPUT_FILE<\/span>, <span style=\"color: #dc2626;\">\"w\"<\/span>, encoding=<span style=\"color: #dc2626;\">\"utf-8\"<\/span>) <span style=\"color: #ea580c;\">as<\/span> <span style=\"color: #0891b2;\">file<\/span>:\n        <span style=\"color: #9333ea;\">json.dump<\/span>(<span style=\"color: #0891b2;\">listings<\/span>, <span style=\"color: #0891b2;\">file<\/span>, indent=<span style=\"color: #16a34a;\">2<\/span>)\n\n    <span style=\"color: #9333ea;\">print<\/span>(<span style=\"color: #dc2626;\">f\"Found {<span style=\"color: #9333ea;\">len<\/span>(<span style=\"color: #0891b2;\">listings<\/span>)} listings\"<\/span>)\n    <span style=\"color: #9333ea;\">print<\/span>(<span style=\"color: #dc2626;\">f\"Saved results to {<span style=\"color: #0891b2;\">OUTPUT_FILE<\/span>}\"<\/span>)\n\n\n<span style=\"color: #ea580c;\">if<\/span> <span style=\"color: #6366f1;\">__name__<\/span> == <span style=\"color: #dc2626;\">\"__main__\"<\/span>:\n    <span style=\"color: #9333ea;\">main<\/span>()<\/code><\/pre>\n<\/div>\n<p>Wenn alles richtig eingestellt ist, sollten Sie eine Ausgabe wie diese sehen:<\/p>\n<div style=\"margin: 20px 0 28px 0;\">\n<pre style=\"background: #f8fafc; border: 1px solid #e5e7eb; border-radius: 10px; padding: 18px; margin: 0; font-size: 13px; line-height: 1.6; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\"><code>[\n  {\n    <span style=\"color: #dc2626;\">\"zpid\"<\/span>: <span style=\"color: #dc2626;\">\"59174136\"<\/span>,\n    <span style=\"color: #dc2626;\">\"address\"<\/span>: <span style=\"color: #dc2626;\">\"45 Garden St APT 3, Boston, MA 02114\"<\/span>,\n    <span style=\"color: #dc2626;\">\"price\"<\/span>: <span style=\"color: #dc2626;\">\"$685,000\"<\/span>,\n    <span style=\"color: #dc2626;\">\"beds\"<\/span>: <span style=\"color: #16a34a;\">2<\/span>,\n    <span style=\"color: #dc2626;\">\"baths\"<\/span>: <span style=\"color: #16a34a;\">1<\/span>,\n    <span style=\"color: #dc2626;\">\"sqft\"<\/span>: <span style=\"color: #16a34a;\">525<\/span>,\n    <span style=\"color: #dc2626;\">\"status\"<\/span>: <span style=\"color: #dc2626;\">\"FOR_SALE\"<\/span>,\n    <span style=\"color: #dc2626;\">\"url\"<\/span>: <span style=\"color: #dc2626;\">\"https:\/\/www.zillow.com\/homedetails\/45-Garden-St-APT-3-Boston-MA-02114\/59174136_zpid\/\"<\/span>\n  }\n]<\/code><\/pre>\n<\/div>\n<p>Jetzt funktioniert Ihr Scraper, d.h. Sie sind jetzt in der Lage, die wichtigsten Informationen aus jedem Zillow-Eintrag abzurufen.<\/p>\n<h2><strong>Fehlersuche bei allgemeinen Problemen<\/strong><\/h2>\n<p>Wenn Sie h\u00e4ufig Zillow-Immobiliendaten durchsuchen, werden Sie zwangsl\u00e4ufig an einigen Stellen auf Mauern sto\u00dfen. Ich habe selbst schon ein paar davon erlebt. Daher kann ich Ihnen sagen, was Sie erwarten k\u00f6nnen, einschlie\u00dflich:  <\/p>\n<ul>\n<li><strong>403<\/strong> <strong>Fehler<\/strong>: Das bedeutet, dass Zillow Ihren Bot blockiert hat. Versuchen Sie, Ihre Kopfzeilen zu \u00e4ndern oder einen Proxy zu verwenden, um weiterhin Zillow-Daten zu sammeln. <\/li>\n<li><strong>Leere<\/strong> <strong>Antworten<\/strong>: Das k\u00f6nnte am JavaScript-Rendering liegen. Versuchen Sie, ein Tool zu verwenden, das die Seite vollst\u00e4ndig rendert, bevor es den HTML-Code zur\u00fcckgibt, z.B. den Web Unlocker. <\/li>\n<li><strong>Fehlende<\/strong> <strong>Daten<\/strong>: Nicht alle Inserate haben die gleichen Informationen. Verwenden Sie immer .get(), wenn Sie Zillow-Daten abrufen, damit Ihr Scraper bei einem fehlenden Schl\u00fcssel nicht abst\u00fcrzt.<\/li>\n<\/ul>\n<p>Da Zillow keine kostenlose API anbietet, m\u00fcssen Sie einen Weg finden, diese zu umgehen. Wenn Sie einen zuverl\u00e4ssigen Weg brauchen, um auf Zillows Angebotsdaten zuzugreifen, ist der Web Unlocker von Floppydata die beste Wahl. <\/p>\n<h2><strong>Fazit<\/strong><\/h2>\n<p>Zillow sieht nicht wie eine Hochsicherheitsseite aus, ist aber durch PerimeterX und ein mehrstufiges Erkennungssystem gesch\u00fctzt, das Ihre IP, Header, TLS-Fingerabdr\u00fccke und Verhaltenssignale \u00fcberwacht. Wenn Sie sich verd\u00e4chtig verhalten, werden Sie markiert und auf unbestimmte Zeit gesperrt. <\/p>\n<p>Daher m\u00fcssen Sie beim Scrapen vorsichtig sein. An dieser Stelle kommt Floppydata Web Unlocker ins Spiel. Es:  <\/p>\n<ul>\n<li>Rotiert Premium-Wohnsitzvollmachten<\/li>\n<li>Rotiert Kopfzeilen und echtes Browser-Fingerprinting<\/li>\n<li>L\u00e4dt jedes Mal sauber und vollst\u00e4ndig in HTML<\/li>\n<li>Nur Rechnungen f\u00fcr erfolgreiche Antworten<\/li>\n<\/ul>\n<p>Mit dieser Einrichtung m\u00fcssen Sie nicht selbst gegen das Anti-Bot-System von Zillow ank\u00e4mpfen; lassen Sie sich vom Floppy Data Web Unlocker helfen. <a href=\"https:\/\/app.floppydata.com\/tools\/scrape\">Fangen Sie jetzt an, Zillow zu scrapen<\/a> &#8211; mit <strong>5 kostenlosen Scrapes<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Einf\u00fchrung Als eine der f\u00fchrenden Immobilienplattformen in den USA ist Zillow eine Plattform, die viele Unternehmen f\u00fcr Immobiliendaten nutzen m\u00f6chten. Die Plattform wird derzeit rund 243 Millionen Mal pro Monat besucht, so dass sie nat\u00fcrlich eine gro\u00dfe Menge an n\u00fctzlichen Immobiliendaten enth\u00e4lt. Auf Reddit berichten Entwickler jedoch h\u00e4ufig, dass sie Schwierigkeiten haben, die Firewall von [&hellip;]<\/p>\n","protected":false},"author":20,"featured_media":44291,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[440,489,562],"tags":[],"class_list":["post-44370","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-how-to","category-scraping"],"acf":[],"_links":{"self":[{"href":"https:\/\/floppydata.com\/de\/wp-json\/wp\/v2\/posts\/44370","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/floppydata.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/floppydata.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/floppydata.com\/de\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/floppydata.com\/de\/wp-json\/wp\/v2\/comments?post=44370"}],"version-history":[{"count":0,"href":"https:\/\/floppydata.com\/de\/wp-json\/wp\/v2\/posts\/44370\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/floppydata.com\/de\/wp-json\/wp\/v2\/media\/44291"}],"wp:attachment":[{"href":"https:\/\/floppydata.com\/de\/wp-json\/wp\/v2\/media?parent=44370"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/floppydata.com\/de\/wp-json\/wp\/v2\/categories?post=44370"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/floppydata.com\/de\/wp-json\/wp\/v2\/tags?post=44370"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}