Zillow Scraper với Python: Hướng dẫn về Dữ liệu Danh sách Công khai
TL;DR
Một công cụ thu thập dữ liệu Zillow chuyển đổi thông tin danh sách thành các bản ghi, nhưng khả năng hiển thị trang không cấp phép cho việc thu thập hoặc công bố lại.
Hướng dẫn Python này phân tích một tài liệu HTML tổng hợp địa phương; nó không gửi yêu cầu đến Zillow.
Giữ giá hỏi, giá bán, và Zestimate trong các trường riêng biệt và giữ lại dấu thời gian nguồn.
Sử dụng các API được phê duyệt của Zillow, các thỏa thuận MLS/IDX, các nguồn cấp phép, hoặc hồ sơ công cộng khi các điều khoản của chúng bao phủ mục đích sử dụng.
Xem xét các phản hồi 403, các trường thiếu, và thay đổi bố cục như là lý do để xem xét quyền truy cập và chất lượng dữ liệu, không phải để né tránh kiểm soát.
What Is a Zillow Scraper and What Can It Do?
Một công cụ thu thập dữ liệu Zillow là một chương trình đọc thông tin danh sách bất động sản và chuyển đổi nó thành các bản ghi cho nghiên cứu. Các nhà phát triển có thể muốn so sánh giá hỏi, số lượng phòng ngủ, loại bất động sản, hoặc trạng thái danh sách trên toàn thị trường. Đối với một dự án sản xuất, xác nhận rằng nguồn và mục đích sử dụng là được phép. Các điều khoản API của Zillow mô tả việc sử dụng bởi các người tiêu dùng API được phê duyệt, và các điều khoản người tiêu dùng của nó quản lý việc sử dụng dịch vụ.
Bài viết này trình bày việc phân tích một trang mẫu địa phương để bạn có thể kiểm tra logic Python mà không làm cho việc truy cập tự động vào giả thiết của hướng dẫn. Đối với một nguồn bất động sản khác cho phép truy xuất trang, Nstdata Crawl có thể trả về nội dung trang để phân tích phía dưới; nó không cấp quyền cho dữ liệu của một trang đích. Xem tài liệu Crawl và hướng dẫn thu thập dữ liệu tự động.
Trải nghiệm Nstproxy Crawl - Bắt Đầu Dùng Thử Miễn Phí Hôm Nay
Thử Nstdata Miễn Phí →
What Zillow Listing Data Can You Collect?
Một bản ghi danh sách có thể chứa các trường này khi hiển thị trong một nguồn được phép và được cho phép bởi giấy phép của nó:
Field
Meaning
Common mistake
Địa chỉ bất động sản
Địa chỉ hiển thị hoặc vị trí gần đúng
Đối xử với địa chỉ ẩn như là lỗi phân tích
Giá danh sách
Giá hỏi hiện tại được quảng cáo
Gọi nó là giá bán
Phòng ngủ và phòng tắm
Số lượng phòng được quảng cáo
Gán studio là không có phòng ngủ mà không tài liệu hóa
Diện tích
Khu vực được quảng cáo
So sánh trước khi chuẩn hóa đơn vị và định nghĩa
Loại bất động sản
Nhà, căn hộ, nhà phố, cho thuê và các nhãn tương tự
Giả định các nhãn ánh xạ giống hệt nhau trên các nguồn
Trạng thái danh sách
Đang bán, chờ xử lý, đã bán, hoặc trạng thái cho thuê
Giả định trạng thái có nghĩa là trang đã được kiểm tra gần đây
URL danh sách
Bằng chứng nguồn và địa điểm kiểm tra lại
Bỏ qua các tham số mà không kiểm tra danh tính danh sách
Thời gian quan sát
Khi pipeline của bạn thấy các giá trị
Sử dụng nhãn đã cập nhật của trang làm thời gian thu thập của bạn
Một Zestimate là một định giá được mô hình tạo ra, không phải là giá hỏi hoặc một giao dịch đã được xác nhận. Giá bán lịch sử là một thực tế khác với ngày và nguồn của riêng nó. Giữ các cột riêng cho mỗi khái niệm và bao gồm một trường loại giá thay vì kết hợp mọi thứ thành một mức giá chung.
How Zillow Listing Pages Are Structured
Kết quả tìm kiếm, trang chi tiết danh sách, bản đồ và các tính năng tài khoản có thể được tạo ra khác nhau. Một trình duyệt có thể hiển thị nội dung được tải sau khi JavaScript chạy, trong khi HTML ban đầu đã lưu chỉ chứa một vỏ bọc. Một đánh dấu bản đồ có thể đại diện cho tọa độ gần đúng hơn là địa chỉ đường phố công cộng.
Khi kiểm tra một mẫu được ủy quyền, hãy tìm bằng chứng ổn định: nhãn ngữ nghĩa, thuộc tính dữ liệu, JSON-LD có cấu trúc, hoặc phản hồi API được tài liệu hóa. Tránh phụ thuộc vào các tên lớp được tạo ra mà thay đổi trong quá trình xây dựng giao diện. Giữ URL, tiêu đề trang, thời gian thu thập, và một b hashed nội dung ngắn với mỗi tài liệu để hành vi của phân tích có thể tái sản xuất.
Can You Scrape Zillow with Python?
Python có thể phân tích HTML, thực hiện các yêu cầu HTTP, và điều khiển một trình duyệt, nhưng những khả năng đó không xác lập rằng một nguồn cụ thể cho phép thu thập tự động. Trang web của nhà phát triển Zillow liệt kê các API và sản phẩm dữ liệu, và quyền truy cập phải được phê duyệt và theo các điều khoản sản phẩm. Đừng xem một danh sách có thể nhìn thấy trong trình duyệt hoặc một yêu cầu làm cho phép ủy quyền lập trình.
Sử dụng thứ tự quyết định này:
Kiểm tra xem có một API chính thức, thỏa thuận MLS/IDX, tập dữ liệu hồ sơ công, hoặc nhà cung cấp cấp phép nào bao phủ các trường của bạn và quyền sử dụng lại.
Nếu một đối tác được ủy quyền cung cấp một nguồn cấp, hãy sử dụng sơ đồ và điều khoản làm mới của nó.
Nếu một nguồn trang được chấp thuận rõ ràng để thu thập, hãy thử nghiệm với một mẫu đại diện nhỏ và tài liệu hóa phạm vi được phép.
Nếu trang web từ chối truy cập hoặc các điều khoản không bao gồm việc sử dụng, hãy dừng lại và chọn một nguồn khác.
Một yêu cầu Python trả về 403 là một quyết định của máy chủ. Đừng nguỵ trang yêu cầu hoặc lẩn tránh kiểm soát truy cập. Các điều khoản về Dữ liệu & API của Zillow là điểm khởi đầu cho việc sử dụng API được phê duyệt; các bộ dữ liệu bản ghi công cộng có giấy phép và ràng buộc riêng.
Các yêu cầu tiên quyết: Python và một Nguồn Dữ liệu Thử nghiệm
Ví dụ sử dụng thư viện chuẩn của Python, vì vậy không cần gói thu thập dữ liệu. Lưu một đoạn danh sách được cung cấp bởi một đối tác có giấy phép hoặc được tạo riêng làm mẫu. Đoạn này không chứa nội dung Zillow trực tiếp:
<articleclass="listing"><spandata-field="address">42 Sample Street, Example City</span><spandata-field="price">$525,000</span><spandata-field="beds">3</span><spandata-field="baths">2.5</span><spandata-field="sqft">1,840</span><adata-field="url"href="/listings/42">Xem danh sách</a></article>
Bộ phân tích được thiết kế cho những thuộc tính data-field rõ ràng này. Nó không phải là một bộ chọn Zillow toàn cầu và không nên được sao chép trên một trang Zillow trực tiếp.
Bước 1: Kiểm tra một Trang Danh sách Bất động sản
Sử dụng một mẫu được phê duyệt trong trình duyệt địa phương hoặc trình soạn thảo văn bản. Xác định các giá trị nào có mặt và liệu mỗi giá trị có đến từ văn bản có thể nhìn thấy, một thuộc tính, hay dữ liệu có cấu trúc hay không. Quyết định cách biểu diễn các giá trị thiếu trước khi viết mã phân tích. Một giá trị giá bán thiếu nên tạo ra một giá trị null rõ ràng và một chẩn đoán; nó không nên lặng lẽ tái sử dụng giá trị của ngày hôm qua.
Bước 2: Trích xuất các Trường Danh sách bằng Python
Hàm sau đọc một đoạn HTML cục bộ, chọn các trường mẫu đã biết, và chuẩn hóa giá và diện tích. Nó giữ các chuỗi thô để các quy tắc sau có thể được xem xét:
from html.parser import HTMLParser
from decimal import Decimal
import re
classListingParser(HTMLParser):def__init__(self):super().__init__() self.fields ={} self.active =Nonedefhandle_starttag(self, tag, attrs): attrs =dict(attrs) field = attrs.get("data-field")if field: self.active = field
if tag =="a": self.fields[field]= attrs.get("href","")defhandle_data(self, data):if self.active and data.strip(): self.fields.setdefault(self.active,"") self.fields[self.active]+= data.strip()defhandle_endtag(self, tag):if self.active: self.active =Nonedefparse_price(raw):match= re.search(r"\d[\d,]*(?:\.\d{1,2})?", raw or"")return Decimal(match.group().replace(",",""))ifmatchelseNonedefparse_integer(raw):match= re.search(r"\d[\d,]*", raw or"")returnint(match.group().replace(",",""))ifmatchelseNonehtml ="""<article>
<span data-field="address">42 Sample Street, Example City</span>
<span data-field="price">$525,000</span>
<span data-field="beds">3</span>
<span data-field="baths">2.5</span>
<span data-field="sqft">1,840</span>
<a data-field="url" href="/listings/42">Xem danh sách</a>
</article>"""parser = ListingParser()parser.feed(html)listing ={"address_raw": parser.fields.get("address"),"listing_price_raw": parser.fields.get("price"),"listing_price":str(parse_price(parser.fields.get("price"))or""),"bedrooms": parse_integer(parser.fields.get("beds")),"bathrooms_raw": parser.fields.get("baths"),"square_feet": parse_integer(parser.fields.get("sqft")),"source_url": parser.fields.get("url"),}assert listing["listing_price"]=="525000"assert listing["square_feet"]==1840print(listing)
Mẫu này xác minh việc phân tích dựa trên mẫu cục bộ. Một nguồn cấp dữ liệu đối tác có thể sử dụng các tên trường khác nhau, JSON lồng nhau, tiền tệ cụ thể theo địa phương, hoặc các giá trị null rõ ràng. Thêm các bài kiểm tra cụ thể cho nguồn trước khi chấp nhận một bản ghi.
Phân tích Giá, Địa chỉ và Tính năng Tài sản
Sử dụng Decimal hoặc lưu trữ một giá trị giá chuẩn hóa dưới dạng chuỗi thập phân thay vì số thực nhị phân. Giữ bản gốc được định dạng vì “$525,000” không có nghĩa giống như “525000 EUR,” và trang có thể hiển thị giá thuê hàng tháng thay vì giá bán. Lưu trữ tiền tệ, tần suất, nhãn nguồn, và thời gian quan sát.
Bảo tồn địa chỉ chính xác như được hiển thị, sau đó chuẩn hóa thông tin định vị hoặc đơn vị một cách riêng biệt bằng cách sử dụng tham chiếu được ủy quyền. Không suy ra một địa chỉ chính xác từ một dấu hiệu gần đúng.
Xử lý Dữ liệu Danh sách Thiếu và Không nhất quán
Một giá bán thiếu nên giữ nguyên giá trị null. Đừng điền địa chỉ ẩn từ một trang khác trừ khi sự khớp được xác minh. Nếu không hiển thị diện tích, hãy để trống thay vì ước tính từ số lượng giường. Giữ một trạng thái phân tích như hoàn chỉnh, một phần, hoặc thất bại, với lý do.
Bước 3: Lưu Danh sách Tài sản vào CSV
Một xuất khẩu hữu ích bao gồm các trường danh tính và nguồn gốc ổn định: ID tài sản, ID nguồn, URL nguồn, giá niêm yết, tiền tệ, số phòng ngủ, diện tích (square feet), trạng thái, thời gian quan sát, và trạng thái phân tích. Sử dụng ID niêm yết ổn định của một nguồn khi thỏa thuận và phản hồi của nó bao gồm một cái. Một hash URL có thể giúp phát hiện trùng lặp nhưng không phải là một danh tính tài sản đáng tin cậy khi niêm yết thay đổi URL.
Bước 4: Xử lý Phân trang và Tài sản Trùng lặp
Các trang tìm kiếm có thể trả về cùng một tài sản dưới các bộ lọc, địa phương hoặc thứ tự phân loại khác nhau. Deduplicate trước tiên bằng ID nguồn. Nếu không có, sử dụng một khóa khớp bảo thủ kết hợp địa chỉ đã chuẩn hóa, đơn vị, nguồn và trạng thái niêm yết; một tiêu đề mờ có thể hợp nhất các đơn vị khác nhau trong cùng một tòa nhà.
Phân trang cần một điểm kiểm tra. Lưu danh sách con trỏ hoặc mã trang sau mỗi lô thành công, ghi lại bộ lọc truy vấn và làm cho các công việc là idempotent để các lần thử lại không tạo ra các hàng trùng lặp. Giữ cho bộ sưu tập trong giới hạn các URL được phép và giới hạn trang hợp lý.
Các Lựa Chọn Dữ Liệu Zillow: APIs, Bộ Dữ Liệu Có Giấy Phép, và Hồ Sơ Công Khai
Một API dữ liệu tài sản hoặc luồng MLS/IDX có giấy phép có thể cung cấp một con đường hợp đồng đến các trường niêm yết. Hồ sơ công khai có thể hỗ trợ nghiên cứuParcel và đánh giá, nhưng thường chậm hơn danh sách thị trường và sử dụng các danh tính khác nhau. Zillow Group cũng công bố các sản phẩm dữ liệu công khai; kiểm tra giấy phép và khả năng sử dụng trước khi tích hợp chúng. Danh mục dữ liệu công khai của nó mô tả danh mục hiện tại, trong khi Khảo Sát Cộng Đồng Mỹ cung cấp bối cảnh nhà ở tổng hợp thay vì các danh sách hoạt động cá nhân.
Chọn theo tần suất cập nhật, các trường, phạm vi địa lý và quyền phân phối lại. Đối với một nghiên cứu xu hướng giá, một luồng định kỳ có giấy phép có thể hữu ích hơn là cố gắng tái cấu trúc các quan sát bị thiếu từ các trang người tiêu dùng.
Các Trường Hợp Sử Dụng Thực Tế cho Dữ Liệu Niêm Yết Zillow
Dữ liệu niêm yết được phép có thể giúp so sánh các dải giá yêu cầu theo khu vực, quan sát số lượng tồn kho, hoặc nghiên cứu cách thức biến đổi kết hợp phòng ngủ theo thời gian. Nó không tự thiết lập giá trị thị trường, khối lượng giao dịch, hoặc khả năng chi trả cho nhà ở. Các niêm yết là một dân số đã chọn: không phải mọi ngôi nhà đều được bán, và các trang cũ hoặc trùng lặp làm thay đổi cung có vẻ ngoài.
Sử dụng các bản ghi giao dịch và bộ dữ liệu thống kê về nhà ở để xác thực các kết luận về doanh số thực tế. Gán các xu hướng giá yêu cầu là các xu hướng giá yêu cầu.
Cách Xây Dựng Một Chuỗi Giám Sát Giá Bất Động Sản
Chuỗi này là nguồn được ủy quyền → thu thập giới hạn → phân giải danh tính → xác thực trường → ảnh chụp lịch sử → phát hiện thay đổi → đánh giá bởi nhà phân tích. Lưu mỗi quan sát thay vì ghi đè giá trị trước đó. Trước khi cảnh báo về một sự chuyển động giá, xác nhận rằng danh tính niêm yết và loại giá không thay đổi.
Một phương pháp dựa trên lược đồ giúp khi các bản ghi đến từ nhiều nhà cung cấp. Hướng dẫn website-to-JSON giải thích nguồn gốc và xác thực trường; hướng dẫn URL-to-Markdown API đề cập đến chuyển đổi khi việc thu thập trang được phép là một phần của quy trình làm việc.
Các Cân Nhắc về Chi Phí và Bảo Trì
Một trình phân tích cục bộ có chi phí chạy thấp nhưng có gánh nặng bảo trì liên tục: thay đổi bố cục nguồn, kiểm tra giấy phép, kiểm tra trình phân tích, và lập lịch cập nhật. Một luồng có giấy phép hoặc API có một mức giá hợp đồng nhưng có thể giảm số lượng bộ chuyển đổi nguồn mà bạn sở hữu. Một dịch vụ thu thập được quản lý thêm việc thu thập dựa trên yêu cầu và có thể tính phí băng thông proxy riêng; kiểm tra giá Nstdata Crawl. Chi phí mỗi niêm yết mà qua kiểm tra danh tính và trường là thông tin hơn so với chi phí mỗi trang được lấy.
Sử Dụng Hợp Pháp và Có Trách Nhiệm Dữ Liệu Zillow
Tuân theo các điều khoản đính kèm trang cụ thể, API, luồng, hoặc bộ dữ liệu cụ thể. Hình ảnh niêm yết, nhận xét của môi giới, và sự thật về tài sản có thể có các quyền riêng. Không tái xuất bản nội dung nguồn hoặc xây dựng một cơ sở dữ liệu thương mại mà không xác nhận giấy phép. Tránh dữ liệu cá nhân không cần thiết cho câu hỏi nghiên cứu, và đặt ra các quy tắc giữ lại và xóa bỏ.
Kết Luận: Kiểm Tra Hợp Đồng Dữ Liệu Trước Khi Mở Rộng
Python có thể phân tích dữ liệu niêm yết bất động sản, nhưng hãy chọn một nguồn được ủy quyền trước khi tự động hóa việc thu thập. Thiết bị này kiểm tra việc phân tích và chuẩn hóa mà không giả vờ là một việc trích xuất trực tiếp từ Zillow. Đối với sản xuất, đảm bảo hợp đồng luồng hoặc API trước, bảo quản bằng chứng thô, và xác thực những ý nghĩa về danh tính và giá ở mỗi giai đoạn.
Q: Bạn có thể lấy dữ liệu từ Zillow bằng Python không?
Python có thể phân tích một tập dữ liệu danh sách địa phương hoặc được ủy quyền. Việc truy cập tự động vào một trang Zillow cụ thể có được phép hay không phụ thuộc vào các điều khoản và thỏa thuận áp dụng; ví dụ này không yêu cầu các trang Zillow.
Q: Zillow có API chính thức không?
Zillow Group xuất bản các API và dịch vụ dữ liệu, nhưng việc truy cập và sử dụng được phép phụ thuộc vào sản phẩm cụ thể và các điều khoản phê duyệt. Kiểm tra cổng thông tin nhà phát triển hiện tại và thỏa thuận của nó.
Q: Trình phân tích danh sách có thể trích xuất dữ liệu gì?
Nó có thể trích xuất các trường có trong một nguồn được ủy quyền, chẳng hạn như địa chỉ hiển thị, giá yêu cầu, số lượng phòng, loại tài sản, trạng thái, URL và thời gian cập nhật. Các giá trị thiếu nên được giữ rõ ràng, không đoán.
Q: Tại sao một yêu cầu có thể trả về mã 403?
Nguồn có thể từ chối yêu cầu hoặc yêu cầu một đường dẫn truy cập được phép. Xem lại các điều khoản và chọn một nguồn được ủy quyền; không lách luật.
Q: Có những phương án thay thế nào cho việc lấy dữ liệu từ trang Zillow?
Hãy xem xét các API bất động sản được phê duyệt, các nguồn MSL/IDX được cấp phép, hồ sơ công khai của quận, thống kê nhà ở của chính phủ, hoặc một nhà cung cấp có hợp đồng bao gồm nghiên cứu và phân phối của bạn.
Một hướng dẫn thực tế về việc thu thập thông tin nghề nghiệp cho nghiên cứu thị trường và phân tích lực lượng lao động. Tìm hiểu cách chọn nguồn hợp lệ, chuẩn hóa các bài đăng và xác thực một tập dữ liệu lặp lại.
Marcus Chen
Oct. 21st 2026
Thu thập toàn bộ trang web chỉ với một yêu cầu API
Tỷ lệ thành công 99,8% với kết xuất JavaScript
Nhận dữ liệu sạch, sẵn sàng cho LLM ở nhiều định dạng
Chuyển mọi trang web thành Markdown, HTML, JSON, liên kết, PDF và hơn thế nữa mà không cần quản lý hạ tầng thu thập dữ liệu.