Menangkan trafik residensial 1 TB, iPhone 18 Pro Max + 33 hadiah lainnyaTop-up $50 = 1 TiketBergabung
Bisnis

Scraper Zillow: cara scraping data properti dengan Python

Mo

06 November 2026

Scraping & otomasi

Scraper Zillow: cara scraping data properti dengan Python

Ringkas artikel ini dengan AI:

Membandingkan listing properti di seluruh kota bisa melelahkan ketika harga berubah dan spreadsheet kemarin sudah usang. Zillow scraper mengumpulkan informasi properti dari halaman listing dan menyusunnya menjadi data yang bisa dibandingkan, diperbarui, dan diekspor tanpa perlu membuat ulang spreadsheet secara manual.

TL;DR

  • Periksa akses terlebih dahulu: Ketentuan Zillow yang dipublikasikan melarang kueri otomatis, termasuk scraping. Pilih program data resmi atau sumber lain yang Anda berwenang untuk mengumpulkan dan menggunakan ulang datanya sebelum merencanakan ekstraksi langsung.

  • Uji sampel kecil. Cocokkan harga, alamat, dan detail properti yang diekstrak dengan sumbernya.

  • Tangani hasil tambahan dengan cermat. Ikuti paginasi, hapus duplikat, dan selidiki nilai yang hilang.

  • Sesuaikan pengaturan proxy dengan tugasnya. Pertimbangkan proxy residensial rotasi untuk kontrol lokasi dan sesi, atau proxy mobile untuk trafik tanpa batas. Keduanya tidak menjamin akses ke Zillow.

  • Validasi sebelum mengekspor. Pisahkan harga penawaran dari harga estimasi dan simpan tanggal pengumpulan.

💡

Pratinjau kolom CSV
zpid,address,listing_status,asking_price,bedrooms,bathrooms,source_url,collected_at

Data apa yang bisa diekstrak Zillow scraper

Zillow data scraper dapat mengumpulkan berbagai informasi dari hasil pencarian, halaman properti individual, dan profil profesional. Hasil pencarian dapat menyediakan ringkasan listing, sedangkan halaman properti dapat menambahkan deskripsi, estimasi, atau riwayat. Kolom kontak perlu diverifikasi terpisah karena kontak agen atau broker berbeda dengan informasi pemilik rumah.

Sebelum Anda melakukan scraping data Zillow, tentukan outputnya. Contoh Python di bawah ini memakai skema khusus penjualan berikut:

Kolom

Format

Arti dalam contoh ini

zpid

String wajib

Pengenal properti, disimpan sebagai teks dan digunakan untuk deduplikasi.

address

String wajib

Teks alamat yang disediakan oleh data pencarian.

listing_status

String wajib

FOR_SALE; contoh ini mengecualikan status listing lainnya.

asking_price

Angka atau null

Harga penawaran penjualan, diasumsikan dalam USD pada contoh ini.

bedrooms

Angka atau null

Jumlah kamar tidur yang dilaporkan; nol tetap merupakan nilai yang valid.

bathrooms

Angka atau null

Jumlah kamar mandi yang dilaporkan, termasuk nilai pecahan jika tersedia.

zestimate

Angka atau null

Estimasi nilai properti berdasarkan asumsi USD pada contoh ini, disimpan terpisah dari harga penawaran.

description

String atau null

Deskripsi yang diekstrak dari dokumen detail properti yang dipilih.

source_url

String wajib

URL properti yang terkait dengan data pencarian.

search_source_url

String wajib

URL yang mengidentifikasi dokumen pencarian tempat data berasal.

collected_at

Timestamp dengan zona waktu

Waktu pengamatan dokumen pencarian.

detail_collected_at

Timestamp atau null

Waktu pengamatan dokumen detail yang terpisah; null jika tidak ada dokumen detail yang diproses.

synthetic

Boolean

Menandai data yang berasal dari input yang dinyatakan sintetis. Nilai false bukan bukti independen bahwa data tersebut asli.

Untuk dokumen tersimpan, waktu pengamatan berasal dari manifes input; fetcher langsung yang opsional mencatat waktu selesainya pengambilan data. Demonstrasi yang disertakan memakai timestamp fiktif.

Nilai opsional yang hilang tetap null di JSON dan kosong di CSV. Kolom wajib yang hilang atau nilai numerik yang salah format akan menghentikan contoh ini, bukan menghasilkan nilai tebakan.

Sewa, harga jual terakhir, luas, riwayat, dan kolom kontak profesional memerlukan pemetaan terverifikasi tambahan. Kolom-kolom ini tidak diekspor oleh contoh ini. Pisahkan harga penawaran, harga jual, nilai sewa, dan estimasi saat memperluas skema.

Memilih antara Python, alat scraping, dan akses data Zillow

Pilih jalur berdasarkan dataset yang Anda butuhkan dan pemeliharaan yang sanggup Anda tangani. Ekspor spreadsheet sekali pakai mungkin cocok dengan alat hosted, sedangkan pengumpulan berulang dengan kolom khusus membutuhkan kontrol lebih besar atas ekstraksi, validasi, dan pembaruan.

Pendekatan

Paling cocok untuk

Pertimbangan utama

Skrip Python

Ekstraksi, validasi, dan penyimpanan khusus

Anda memelihara kode dan memverifikasi akses ke sumber.

Yozh Scraper

Ekstraksi browser yang dapat dipakai ulang melalui layanan lokal

Memerlukan deployment dan preset ekstraksi yang sudah diuji pada halaman yang dituju.

Ekstensi browser atau scraper hosted

Ekspor tanpa perlu memelihara kolektor

Periksa kolom yang tersedia, batas pengumpulan, privasi, dan total biaya.

API scraping terkelola

Menyerahkan pengambilan halaman atau ekstraksi ke pihak lain

Pastikan apakah responsnya berisi HTML atau data properti terstruktur.

Program data resmi atau unduhan riset

Integrasi resmi atau analisis pasar regional

Periksa cakupan dataset, syarat akses, dan penggunaan yang diizinkan.

Sebelum memilih alat, uji sampel kecil yang berisi kolom yang Anda perlukan. Periksa apakah alat tersebut mengambil detail properti atau hanya ringkasan pencarian, bagaimana alat menangani nilai yang hilang, dan apakah hasil ekspornya mempertahankan pengenal dan tanggal.

Produk pihak ketiga yang dipasarkan sebagai “Zillow API” belum tentu merupakan layanan resmi Zillow. Produk itu mungkin mengumpulkan konten situs web dan menyajikannya lewat endpoint miliknya sendiri; nama saja tidak membuktikan afiliasi, lisensi, atau izin pengumpulan.

Zillow Research menyediakan metrik perumahan regional, termasuk nilai rumah, sewa, dan inventaris. Program pengembang Zillow Group mencakup produk tertentu dengan syarat akses masing-masing. Opsi-opsi ini melayani tujuan yang berbeda dan tidak boleh dianggap sebagai akses tanpa batas ke setiap listing atau kolom kontak.

💡

Baca selengkapnya tentang No-Code Web Scraper. 

Cara scraping Zillow dengan Python

Contoh ini mengubah dokumen pencarian dan properti yang tersimpan menjadi data CSV dan JSON. Contoh ini diuji dengan sampel HTML sintetis dan respons HTTP tiruan, tanpa mengambil halaman Zillow langsung selama validasi.

Skrip membaca satu dokumen pencarian, mempertahankan hingga lima properti FOR_SALE yang unik, dan dapat memperkaya satu properti terpilih dari dokumen detail yang cocok. Batas lima data adalah bagian dari contoh ini, bukan batas hasil pencarian Zillow.

💡

Lingkungan pengujian: Linux x86_64, Python 3.12.14, Requests 2.34.2, dan Beautiful Soup 4.15.0. Dependensi dikunci di requirements.txt. Contoh ini diuji pada 4 November 2026 dan diperiksa ulang pada 5 November 2026. Unduh contoh Python, dependensi yang dikunci, contoh yang diuji, pengujian otomatis, serta ekspor CSV dan JSON yang sesuai.

Menyiapkan Python dan menentukan output

Ekstrak file contoh yang menyertai, buka direktorinya, dan buat lingkungan Python:

python
python3 -m venv .venv

source .venv/bin/activate

python -m pip install -r requirements.txt

Output berisi pengenal properti, alamat, status listing, harga penawaran, jumlah kamar tidur, kamar mandi, URL sumber, dan timestamp pengamatan. Detail properti opsional mencakup Zestimate dan deskripsi.

Simpan kredensial di luar skrip. Konfigurasi proxy HTTP opsionalnya membaca ZILLOW_PROXY_URL dari environment; jika tidak diatur, skrip memakai koneksi langsung. Klien Python ini tidak mewarisi pengaturan proxy Chrome desktop.

File sample.json yang disertakan mengidentifikasi dua file HTML sintetis beserta waktu pengambilan contohnya. Pemrosesan halaman tersimpan mempertahankan timestamp tersebut, bukan menampilkan tanggal parsing sebagai tanggal pengumpulan.

Memeriksa satu halaman pencarian dan satu halaman properti

Sebelum memutuskan cara scraping data dari Zillow, periksa halaman yang tercakup dalam otorisasi Anda. Bandingkan respons HTML asli dengan halaman yang dirender browser untuk mengetahui di mana informasi yang diperlukan muncul.

Parser contoh mencari JSON tertanam di:

html
<script id="__NEXT_DATA__" type="application/json">

Kemudian parser memeriksa struktur spesifik berikut:

bash
Search records:

props.pageProps.searchPageState.cat1.searchResults.listResults




Property details:

props.pageProps.componentProps.gdpClientCache

Ini adalah asumsi yang diuji oleh sampel yang disertakan, bukan antarmuka Zillow yang permanen. Verifikasi dengan dokumen sumber yang diizinkan sebelum memakai parser.

Jika kolom baru muncul setelah JavaScript dijalankan, permintaan HTTP dan parser HTML tidak akan mereproduksi rendering tersebut. Otomatisasi browser mungkin diperlukan, tetapi rendering saja tidak memberikan izin maupun menjamin akses.

Mengambil dan memvalidasi respons

Fungsi fetch_html() pada skrip lengkap memeriksa status HTTP, URL akhir, dan tipe konten sebelum mengembalikan HTML:

python
defp fetch_html(url):

    url = source_url(url)

    proxy = os.getenv("ZILLOW_PROXY_URL")




    if proxy and urlsplit(proxy).scheme != "http":

        raise ValueError("This example supports an HTTP proxy endpoint only")




    with requests.Session() as session:

        session.trust_env = False




        if proxy:

            session.proxies = {"https": proxy}




        with session.get(

            url,

            timeout=(5, 20),

            allow_redirects=False,

        ) as response:

            if response.status_code != 200:

                raise ValueError(

                    f"Stopped: HTTP {response.status_code}; no automatic retry"

                )




            if response.url != response.request.url:

                raise ValueError("Unexpected final URL")




            source_url(response.url)

            media_type = (

                response.headers.get("Content-Type", "")

                .split(";")[0]

                .lower()

               .strip()

             )




            if media_type not in {"text/html", "application/xhtml+xml"}:

                raise ValueError("Expected an HTML response")




            return response.text

Nilai timeout memberi waktu lima detik untuk membangun koneksi dan dua puluh detik untuk ketidakaktifan pembacaan; nilai ini bukan batas waktu eksekusi total. Requests menjelaskan perbedaan ini dalam panduan timeout-nya.

Respons HTTP 200 tetap memerlukan validasi konten. Halaman tantangan, dokumen yang tidak terduga, atau struktur data yang berubah tidak boleh menjadi ekspor yang dianggap berhasil dengan nol data. Fungsi berikut memeriksa keberadaan wadah JSON yang diharapkan:

python
def page_props(html):

    soup = BeautifulSoup(html, "html.parser")

    node = soup.find("script", id="__NEXT_DATA__")




    if node is None:

        raise ValueError(

            "Expected JSON block absent: inspect the returned page"

        )




    try:

        props = json.loads(node.get_text())["props"]["pageProps"]

    except (KeyError, TypeError, json.JSONDecodeError) as exc:

        raise ValueError("Invalid or changed page-data structure") from exc




    if not isinstance(props, dict):

        raise ValueError("Expected a pageProps object")




    return props

Mengekstrak data listing dan detail properti terpilih

Contoh ini mempertahankan data yang secara eksplisit ditandai FOR_SALE, mewajibkan pengenal dan alamat, serta menghapus ZPID duplikat sebelum menerapkan batas lima data. Data sewa dan data terjual dikecualikan agar harganya tidak salah diberi label sebagai harga penawaran.

Kolom numerik opsional tetap None jika tidak ada. String yang tidak terduga, nilai negatif, dan angka yang tidak valid menghentikan pemrosesan, bukan dikonversi secara diam-diam:

python
def number(value, positive=False):

    if value is None:

        return None




    if (

        isinstance(value, bool)

        or not isinstance(value, (int, float))

        or not math.isfinite(value)

        or value < 0

        or (positive and value == 0)

    ):

        raise ValueError(

            "Unexpected numeric value; review the field mapping"

        )




    return value

Sertakan halaman detail opsional hanya jika kolom tambahan diperlukan. URL dan pengenal propertinya harus cocok dengan data pencarian yang dipilih. Parser menyimpan Zestimate terpisah dari harga penawaran dan mencatat timestamp halaman detail secara terpisah.

Inilah inti dari cara scraping data Zillow secara akurat: pertahankan arti setiap kolom, dan jangan pernah mengarang nilai yang hilang.

Menjalankan sampel kecil dan memeriksa hasilnya

Jalankan skrip lengkap pada halaman sintetis yang disertakan:

shell
python zillow_sample.py sample.json --output run-01

Direktori output harus baru. Sampel yang diuji menghasilkan:

bash
Saved 2 unique listings to run-01

Salah satu data hasilnya tampak seperti ini. Semua informasi properti di bawah ini fiktif:

json
{

  "zpid": "9000000001",

  "address": "100 Example Lane, Sample City, TX 00000",

  "listing_status": "FOR_SALE",

  "asking_price": 395000,

  "bedrooms": 3,

  "bathrooms": 2,

  "source_url": "https://www.zillow.com/homedetails/example-property/9000000001_zpid/",

  "search_source_url": "https://www.zillow.com/synthetic-test-city/",

  "collected_at": "2026-11-04T10:00:00+00:00",

  "zestimate": 400000,

  "description": "Synthetic property description for parser testing only.",

  "detail_collected_at": "2026-11-04T10:01:00+00:00",

  "synthetic": true

}

Beberapa kolom terpilih dari ekspor CSV menunjukkan bagaimana nilai yang hilang dipertahankan:

bash
zpid,listing_status,asking_price,bedrooms,bathrooms,zestimate

9000000001,FOR_SALE,395000,3,2,400000

9000000002,FOR_SALE,,0,1,

Cocokkan pengenal, harga, kolom yang hilang, dan jumlah duplikat dengan inputnya. Data kedua sengaja mempertahankan harga yang hilang sambil tetap menyimpan nol kamar tidur.

Untuk pengumpulan langsung yang diizinkan, sediakan manifes terpisah berisi URL terverifikasi dan gunakan --live; skrip menolak input sintetis dalam mode tersebut. Pengujian yang disertakan dapat dijalankan ulang dengan:

shell
python -m unittest -v

Lulusnya pengujian ini mengonfirmasi perilaku yang didemonstrasikan, bukan akses Zillow saat ini. Validasi struktur halaman yang sebenarnya dan sampel yang diizinkan sebelum memperluas pengumpulan.

Catatan validasi

Seluruh 13 pengujian otomatis lulus pada 4 November 2026 dan lulus lagi pada 5 November. Pemeriksaan memakai sampel HTML sintetis dan respons HTTP tiruan.

Pemeriksaan

Hasil

Cakupan sampel

Satu dokumen pencarian dan satu dokumen detail yang cocok.

Entri mentah

Tiga entri pencarian sebelum deduplikasi.

Data yang diekspor

Dua properti unik setelah satu duplikat dihapus.

Data yang ditolak

Tidak ada dalam sampel demonstrasi yang disertakan.

Data tidak lengkap

Satu data yang dipertahankan memuat nilai opsional yang hilang.

Nilai yang hilang

asking_price, zestimate, description, dan detail_collected_at bernilai null pada data tersebut.

Perbandingan ekspor

CSV dan JSON yang dibuat ulang cocok dengan file sampel yang disertakan.

Timestamp detail yang hilang berarti tidak ada dokumen detail yang diproses untuk properti tersebut; ini tidak menandakan permintaan detail yang gagal.

Pengujian terpisah memeriksa kegagalan yang diharapkan, termasuk respons yang ditolak, URL atau tipe konten yang tidak terduga, pengenal yang hilang, JSON yang rusak, dan struktur yang berubah. Kompatibilitas Zillow secara langsung, paginasi, dan koneksi melalui penyedia proxy tidak divalidasi.

Gunakan Yozh Scraper untuk ekstraksi yang dapat dipakai ulang

Yozh Scraper di GitHub menyediakan layanan self-hosted untuk rendering browser, ekstraksi kolom, dan pekerjaan asinkron. Anda dapat memakai ulang aturan ekstraksi di berbagai permintaan sementara Python tetap bertanggung jawab atas validasi dan penyimpanan.

Yozh Scraper menyediakan rendering browser, aturan ekstraksi, dan preset yang dapat dipakai ulang untuk membangun konfigurasi khusus. Panduan ini tidak menyertakan preset Zillow yang diverifikasi pada halaman langsung. Validasi kolom yang diperlukan terhadap dokumen sumber yang diizinkan sebelum memakai preset khusus untuk pengumpulan properti berkala saat menggunakannya sebagai Zillow web scraper.

  1. Jalankan layanan dan periksa kesehatannya. Setelah meng-clone repositori, salin .env.example ke .env dan jalankan docker compose up --build. Di terminal lain, periksa http://localhost:8000/api/v1/health. Respons yang sehat hanya mengonfirmasi layanan tersedia, bukan keberhasilan ekstraksi properti.

  2. Buat dan verifikasi preset khusus. Buka http://localhost:8000/docs dan buat preset dengan aturan CSS atau XPath yang terverifikasi. Beri nama yang diawali user_, misalnya user_zillow_property. Uji melalui POST /api/v1/presets/{name}/test menggunakan sampel yang diizinkan. Periksa halaman properti lain sebelum memakai ulang aturan tersebut.

  3. Jalankan satu pekerjaan kecil. Kirim satu URL properti melalui POST /api/v1/scrape/preset/page menggunakan konfigurasi preset yang tersimpan. Simpan job_id yang dikembalikan; ID ini mengidentifikasi tugas latar belakang, bukan mengonfirmasi bahwa ekstraksi berhasil.

  4. Validasi kolom properti. Petakan hasil ke skema yang sama dengan contoh Python: pengenal properti, alamat, status listing, harga penawaran, kamar tidur, kamar mandi, dan URL sumber. Tambahkan timestamp pengumpulan, periksa tipe numerik, dan pertahankan nilai opsional yang hilang. Bandingkan output dengan sumbernya sebelum menambah volume.

  5. Ambil hasil dari Python. Lakukan polling GET /api/v1/scrape/{job_id} dengan jeda dan batas waktu keseluruhan, serta tangani pekerjaan yang gagal atau dibatalkan. Setelah selesai, minta GET /api/v1/scrape/{job_id}/results, periksa error dan peringatan, lalu validasi datanya sebelum diekspor.

💡

Untuk petunjuk instalasi yang lebih lengkap dan penguji visual opsional, ikuti panduan screen scraping.

Menangani paginasi dan hasil pencarian yang tidak lengkap

Satu pencarian Zillow sebaiknya diperlakukan sebagai sampel yang terdefinisi, bukan inventaris regional yang lengkap. Batas geografis, filter listing, paginasi, dan kegagalan pengumpulan semuanya dapat memengaruhi data yang muncul, meskipun pencarian menampilkan total yang lebih besar.

Sebelum memperluas pengumpulan, tentukan apa yang diwakili satu data: properti, unit individual, bangunan, atau listing. Gedung apartemen dan unit-unitnya yang tersedia tidak boleh digabungkan hanya karena alamat jalannya sama.

Contoh Python di atas membaca satu halaman pencarian dan tidak menerapkan paginasi. Untuk memperluasnya, periksa antarmuka pencarian yang diizinkan dan verifikasi bagaimana halaman berikutnya diminta. Pertahankan batas geografis, filter, dan pengaturan pengurutan yang asli sepanjang proses, dan catat bersama dataset.

Berhenti ketika halaman berulang, tidak mengembalikan pengenal baru, atau mencapai batas halaman, data, atau waktu proses yang Anda tetapkan. Catat alasan berhentinya agar sampel yang sengaja dibatasi dapat dibedakan dari pengumpulan yang gagal.

Hapus duplikat hasil yang tumpang tindih menggunakan ZPID jika mengidentifikasi entitas yang dimaksud, atau pengenal properti, unit, atau listing lain yang terverifikasi. Jangan mengandalkan alamat saja.

Untuk setiap proses, catat:

  • Data mentah: entri yang dikembalikan sebelum deduplikasi dan validasi.

  • Data unik: entri yang dipertahankan setelah duplikat dihapus.

  • Data yang ditolak: entri yang dikecualikan, beserta alasannya.

  • Data tidak lengkap: entri yang dipertahankan tetapi kehilangan kolom opsional; ini juga dihitung sebagai unik.

Laporkan cakupan yang ditunjukkan oleh metode yang diuji. Panduan yang ditinjau menjelaskan batas pencarian dan pendekatan yang berbeda, jadi hindari menyajikan satu angka tetap sebagai batas hasil Zillow yang berlaku universal.

Membersihkan data Zillow dan mengekspor CSV atau JSON

Data yang diekstrak menjadi berguna ketika maknanya tetap terjaga saat diurutkan, difilter, dan dibandingkan. Sebelum mengekspor, normalkan setiap kolom secara konsisten dan periksa beberapa data terhadap sumbernya.

  • Simpan kode ZIP sebagai string. Angka nol di depan penting, jadi impor kolom sebagai teks saat membuka CSV di Excel.

  • Pisahkan komponen harga. Simpan jumlah, mata uang, jenis harga, dan periode sewa secara terpisah. Harga penawaran, harga jual terakhir, dan Zestimate harus berada di kolom terpisah atau data yang diberi label jelas.

  • Pertahankan satuan luas. Simpan ukuran beserta satuannya, misalnya kaki persegi, agar perhitungan berikutnya memakai nilai yang sebanding.

  • Bedakan nilai yang hilang dari nol. Gunakan null di JSON atau sel kosong di CSV untuk informasi yang tidak tersedia. Nol kamar tidur dapat menggambarkan studio; jangan otomatis menjadikannya nilai yang hilang.

  • Pertahankan asal data. Sertakan URL sumber dan timestamp pengumpulan agar setiap pengamatan dapat dilacak dan diperiksa.

CSV cocok untuk data properti yang datar. Simpan riwayat harga atau listing yang bersarang dalam JSON, atau ekspor ke tabel terpisah yang dihubungkan dengan pengenal properti.

Untuk pemantauan, simpan pengamatan bertanggal alih-alih menimpa nilai sebelumnya. Listing yang menghilang pada proses berikutnya tidak membuktikan bahwa properti telah terjual: perubahan filter, pengumpulan yang tidak lengkap, atau penghapusan listing bisa menjadi penyebabnya.

Contoh data JSON dari file pengujian yang disertakan

Ini adalah data kedua yang dihasilkan oleh contoh Python. Pengenal properti, alamat, URL, dan timestamp pengamatannya fiktif. Harga penawaran yang hilang tetap null, sedangkan nol kamar tidur tetap berupa angka nol.

Lalu masukkan JSON ini:

json
{

  "zpid": "9000000002",

  "address": "200 Example Lane, Sample City, TX 00000",

  "listing_status": "FOR_SALE",

  "asking_price": null,

  "bedrooms": 0,

  "bathrooms": 1,

  "source_url": "https://www.zillow.com/homedetails/second-example/9000000002_zpid/",

  "search_source_url": "https://www.zillow.com/synthetic-test-city/",

  "collected_at": "2026-11-04T10:00:00+00:00",

  "zestimate": null,

  "description": null,

  "detail_collected_at": null,

  "synthetic": true

}

Pemeriksaan di bawah ini juga mencakup kolom yang mungkin Anda tambahkan nanti; skrip yang disertakan memakai skema khusus penjualan yang lebih sempit seperti yang ditentukan sebelumnya.

Memilih proxy dan pengaturan sesi untuk tugas Anda

Proxy mengendalikan rute jaringan dan IP keluar yang dipakai scraper Anda. Pilih koneksi berdasarkan volume trafik, lokasi, dan kesinambungan sesi; tidak ada jenis proxy yang menjamin akses ke Zillow.

Koneksi

Kecocokan beban kerja

Harga

Residensial rotasi

Penargetan lokasi, dengan sticky session hingga 24 jam untuk langkah-langkah yang saling terhubung, terbaik untuk web scraping, pengumpulan data AI, otomatisasi, SEO, dan riset pasar.

Pool standar: $2/GB dengan geotargeting gratis

Mobile

IP bersih dengan trafik tanpa batas membantu mengendalikan biaya bandwidth saat merender unduhan, skrip, dan gambar berulang kali, terbaik untuk web scraping, otomatisasi, SEO, dan riset pasar. 

LTE/5G $1.7/hari  dengan dukungan protokol HTTP, SOCKS5, dan UDP.   

Static ISP

Alamat tetap cocok untuk pengamatan berulang yang memerlukan perutean konsisten, dengan bandwidth tanpa batas, terbaik untuk web scraping, pengujian QA, otomatisasi, dan akses khusus wilayah. 

$5.29/bulan dengan uptime 99.9%. 

Datacenter

Proxy datacenter dedicated berkecepatan tinggi IPv4/IPv6 dengan bandwidth tanpa batas; terbaik untuk web scraping, otomatisasi, pemantauan, integrasi API, dan pengumpulan data skala besar. 

$2.18/bulan dengan dukungan protokol HTTP dan SOCKS5.  

Untuk kolektor berbasis browser, satu konfigurasi yang terdokumentasi adalah Ubuntu 24.04, Playwright Chromium, dan proxy HTTP dengan autentikasi username/password. Atur server, username, dan password melalui browser.new_context(proxy=...), dengan memuat kredensial dari variabel lingkungan. Playwright mendokumentasikan kredensial proxy HTTP secara terpisah dari dukungan SOCKSv5, jadi jangan berasumsi SOCKS5 dengan autentikasi bekerja identik.

Buka halaman pemeriksa IP di dalam konteks browser yang sama dan verifikasi IP keluar serta lokasinya. Lalu uji ekstraksi yang representatif dan diizinkan, dan periksa data yang dikembalikan sebelum meningkatkan beban kerja.

🔥

Dapatkan pemeriksaan alamat IP CyberYozh App dengan penilaian nyata, menggunakan sistem anti-fraud terkemuka.

Cara scraping Zillow beserta nomor telepon

Ketersediaan kolom kontak bergantung pada listing, sumber, dan metode ekstraksi. Sebelum menambahkan nomor telepon ke Zillow scraper, pastikan sumber yang diizinkan menampilkan kolom kontak tersebut dan mengidentifikasi siapa pemiliknya.

Kontak agen dan broker berbeda dengan detail pemilik rumah. Nomor yang ditampilkan di samping listing tidak otomatis menjadi owner_phone dalam dataset Anda. Periksa nama dan label yang menyertainya, dan pertahankan hubungan yang dinyatakan alih-alih menebak siapa yang menjawab.

Untuk setiap kontak profesional yang diizinkan, simpan:

  • Nomor telepon: disimpan sebagai teks, termasuk ekstensi yang ditampilkan.

  • Nama dan peran: persis seperti yang diidentifikasi oleh sumber.

  • URL sumber: halaman yang memuat informasi kontak tersebut.

  • Timestamp pengumpulan: kapan informasi tersebut diamati.

Pisahkan beberapa kontak agar nomor agen tidak terkait dengan nama broker. Nomor yang hilang harus tetap null di JSON atau kosong di CSV; catat error ekstraksi secara terpisah alih-alih mengisi kekosongan dengan detail tebakan.

Tampilan publik tidak serta-merta memberi izin untuk setiap tujuan pengumpulan, penggunaan ulang, atau penjangkauan. Tinjau syarat akses sumber dan persyaratan privasi yang berlaku sebelum mengumpulkan atau menggunakan kontak profesional.

🔥

Sewa nomor seluler virtual atau nomor residensial yang kompatibel dengan layanan online populer.

Mengatasi masalah umum scraping Zillow

Identifikasi tahap yang gagal sebelum mengubah pengaturan. Masalah koneksi berkaitan dengan perutean, autentikasi, atau transport; pembatasan akses menolak atau membatasi permintaan; error ekstraksi terjadi ketika kolektor tidak dapat menafsirkan konten yang dikembalikan dengan benar.

Gejala

Kemungkinan penyebab

Pemeriksaan berikutnya

Respons 403 atau halaman tantangan

Penolakan akses atau pemeriksaan trafik otomatis

Periksa isi respons dan identifikasi layanan yang mengembalikannya. Hentikan percobaan berulang dan verifikasi metode akses yang diizinkan.

Respons 429

Batas laju permintaan

Patuhi Retry-After jika ada. Kurangi frekuensi dan konkurensi permintaan, gunakan jeda percobaan ulang yang meningkat, dan batasi jumlah percobaan.

HTTP 200, tanpa data

Konten tak terduga atau ketidakcocokan ekstraksi

Periksa URL akhir, tipe konten, dan dokumen tersimpan. Pastikan kolom yang diharapkan ada sebelum mengubah selector.

Cakupan listing tidak lengkap

Filter, paginasi, batas pengumpulan, atau permintaan yang gagal

Bandingkan batas geografis dan filter; tinjau jumlah halaman, data yang ditolak, dan alasan berhenti.

Properti duplikat

Pencarian yang tumpang tindih atau halaman yang berulang

Hapus duplikat dengan pengenal terverifikasi sambil mempertahankan unit yang berbeda dan pengamatan bertanggal.

Nomor telepon hilang

Kolom tidak tersedia atau salah dipetakan

Periksa sumber dan label kontak. Pertahankan nilai yang hilang alih-alih menebak.

Harga salah atau hilang

Kolom harga salah atau error konversi

Verifikasi harga penawaran, sewa, harga jual, dan Zestimate secara terpisah. Periksa mata uang dan periode sewa.

Parser berhenti setelah halaman berubah

HTML atau struktur JSON tertanam berubah

Bandingkan sampel tersimpan, perbarui selector atau path yang terdampak, dan validasi ulang sampel kecil.

Untuk kegagalan koneksi, verifikasi endpoint, autentikasi, dan perutean efektif pada klien yang mengirim permintaan. Setelah perbaikan apa pun, bandingkan nilai yang diekstrak dengan sumbernya sebelum memulai ulang proses yang lebih besar.

Bangun dataset yang dapat Anda verifikasi

Pilih sumber yang diizinkan, validasi sampel kecil, dan pertahankan arti setiap kolom saat mengekspor. Perluas hanya setelah membandingkan output dengan sumbernya. Uji aturan ekstraksi terverifikasi Anda di Yozh Scraper sebelum menyiapkan pengumpulan berkala.

🦔

Jika pengumpulan memerlukan lokasi keluar tertentu atau IP yang konsisten, pilih koneksi yang sesuai dari katalog proxy dan uji dengan pengaturan ekstraksi terverifikasi Anda.

Bermanfaat?

Bagikan artikel

FAQ Zillow Scraper