Zillow — один из крупнейших сайтов по недвижимости в США, предлагающий сокровищницу объявлений о недвижимости, цен на недвижимость и аналитику рынка. Но очистить Zillow непросто: его защита от ботов может быстро остановить ваши усилия по извлечению данных.
В этом руководстве рассказывается, как эффективно собирать данные о свойствах Zillow с помощью Резидентные прокси Massive и Питон с драматургом. Вы научитесь обходить обнаружение, надежно извлекать данные о недвижимости и масштабировать рабочий процесс очистки как профессионал.
Зачем собирать данные о недвижимости Zillow?
Данные по недвижимости Zillow — это золотая жила для:
- Исследование рынка: Анализируйте списки недвижимости, тенденции цен и статистику окрестностей, чтобы получить представление о динамике рынка недвижимости.
- Инвестиционный анализ: Изучите историческую структуру цен и рыночные индикаторы для оценки потенциальных инвестиционных возможностей.
- Аналитика местоположения: Изучите демографию, удобства и характеристики недвижимости в окрестностях для поддержки планирования развития.
- Экономические исследования: Отслеживайте тенденции рынка жилья, индексы цен и региональные экономические показатели для академических исследований или политических исследований.
Независимо от того, являетесь ли вы аналитиком данных, инвестором в недвижимость или разработчиком инструментов автоматизации зданий, извлечение данных из Zillow может дать ценную информацию о рынке недвижимости.
Проблема: меры Zillow по борьбе с царапинами
Сбор данных из Zillow сопряжен со значительными трудностями из-за надежных систем защиты от ботов:
- Системы верификации людей: Zillow использует проверку методом «нажатием и удерживанием» и другие методы подтверждения того, что запросы поступают от реальных пользователей, а не от автоматизированных систем.
- Ограничение скорости: Zillow тщательно отслеживает частоту запросов к страницам и может временно ограничить доступ, если за короткий период будет сделано слишком много запросов.
- Блокировка IP-адресов: Zillow может блокировать доступ с IP-адресов, обнаруживающих необычные модели активности.
- Динамические обновления сайта: Zillow регулярно обновляет структуру и макет своего веб-сайта, требуя адаптации вашего скрепера.
Вот пример того, что происходит, когда скрепер блокируется при проверке человеком:

Вот тут-то и пригодятся прокси, в частности, резидентные прокси.
Зачем использовать прокси для очистки Zillow?
Прокси выступают в роли посредников между вашим парсером и Интернетом. Они необходимы для очистки веб-страниц Zillow, потому что помогают:
- Как избежать запретов на использование IP: Прокси позволяют ротация IP-адресов, что значительно снижает риск обнаружения и блокировки.
- Доступ к контенту с географическими ограничениями: Некоторые списки объектов недвижимости и данные доступны только в определенных регионах. Прокси-серверы позволяют вам выглядеть так, как будто вы просматриваете страницу из разных мест.
- Обход ограничений по тарифам: Zillow накладывает ограничения на количество запросов с одного IP-адреса. Прокси-серверы помогают распределять запросы по нескольким IP-адресам, что позволяет избежать этих ограничений.
Однако не все прокси одинаковы.
Прокси-серверы для жилых и центров обработки данных: что лучше всего работает?
Судя по опыту, резидентные прокси превосходят прокси-серверы для центров обработки данных по очистке Zillow. Вот почему:
- Резидентные прокси используют реальные IP-адреса, привязанные к реальным интернет-провайдерам и устройствам, поэтому они выглядят как обычные пользователи.
- Прокси-серверы для центров обработки данных, хотя и быстрее и дешевле, легко обнаруживаются системами Zillow.
Если ваша цель — последовательный масштабируемый парсинг без блоков, жилой — это то, что нужно.
Начало работы с Massive
Создайте свой аккаунт на partners.joinmassive.com и выберите план, соответствующий вашим потребностям. После этого перейдите к Массивная панель управления для получения учетных данных прокси-сервера (имя пользователя и пароль).

Этапы настройки:
Посетите Быстрый старт раздел для настройки параметров прокси-сервера:
- Выберите предпочтительный протокол (HTTP, HTTPS или SOCKS5).
- Выберите между вращающиеся или липкие прокси.
- Задайте настройки геотаргетинга (страна, штат, город, почтовый индекс или ASN).
После настройки вы получите готовую к использованию команду cURL для вашего конкретного варианта использования.

Дополнительные функции, такие как таргетинг на основе местоположения и фиксированные сеансы, см. в Обширная документация. В документации представлены пошаговые инструкции по максимально эффективному использованию прокси-серверов Massive Residential.
Благодаря этой настройке вы можете использовать Massive Proxies для сбора данных о продуктах Zillow из определенного региона.
Создание Zillow Scraper с использованием массивных прокси
Давайте создадим скребок Zillow, используя драматург и массивные прокси. Playwright автоматизирует взаимодействие с браузерами и эффективно обрабатывает динамический контент, а прокси помогают избежать обнаружения и обойти ограничения.

Мы соберем объявления о недвижимости для Чикаго, штат Иллинойс, извлекая следующую информацию по каждому свойству:
- Адрес
- Статус (например, «Активно», «В ожидании»)
- Цена
- Количество спален
- Количество ванных комнат
- Квадратные футы
- Листинговая компания
- URL-адрес объекта
1. Настройте свою среду
Начните с создания виртуальной среды и установки необходимых пакетов. При желании вы также можете использовать Conda или Poetry.
python -m venv zillow_envsource
zillow_env/bin/activate # Windows: zillow_env\\Scripts\\activate
pip install playwright python-dotenv
playwright install
Создайте .env файл для безопасного хранения ваших учетных данных прокси-сервера Massive.
PROXY_SERVER="your_proxy_server"
PROXY_USERNAME="your_username"
PROXY_PASSWORD="your_password"
2. Настройте параметры прокси-сервера и браузера
Настройте учетные данные прокси-сервера и заблокируйте ненужные ресурсы, чтобы оптимизировать производительность и избежать обнаружения.
class Config:
PROXY_SERVER = os.getenv("PROXY_SERVER")
PROXY_USERNAME = os.getenv("PROXY_USERNAME")
PROXY_PASSWORD = os.getenv("PROXY_PASSWORD")
BLOCKED_RESOURCES = ["stylesheet", "image", "media", "font", "imageset"]
Блокировка ненужных ресурсов, таких как шрифты и изображения, ускоряет процесс очистки.
Вот пример того, как выглядит страница при блокировке ресурсов:

3. Запустите браузер с поддержкой прокси-серверов
Здесь мы определяем контекст браузера, который направляет запросы через Massive и фильтрует нежелательный контент.
class AsyncZillowSearchScraper:
def __init__(self, headless: bool = True):
self.headless = headless
self.playwright = None
self.browser = None
self.context = None
async def __aenter__(self):
self.playwright = await async_playwright().start()
browser_config = {"headless": self.headless}
if Config.PROXY_SERVER:
browser_config["proxy"] = {
"server": Config.PROXY_SERVER,
"username": Config.PROXY_USERNAME,
"password": Config.PROXY_PASSWORD,
}
self.browser = await self.playwright.chromium.launch(**browser_config)
self.context = await self.browser.new_context()
await self.context.route("**/*", self._route_handler)
return self
async def _route_handler(self, route):
if route.request.resource_type in Config.BLOCKED_RESOURCES:
await route.abort()
else:
await route.continue_()
4. Извлеките данные листинга Zillow
Каждое свойство на Zillow содержится в <li> тег. Эти <li> У тегов есть класс, начинающийся с ListItem, и каждый тег представляет собой один список свойств. Внутри них <li> теги, вы найдете все ключевые сведения о недвижимости, такие как адрес, цена и характеристики недвижимости
.

Вот как эти <li> теги структурированы:
- The адрес расположен внутри <address> тег с атрибутом data-test="адрес карты свойств».
- The цена находится в пределах <span> тег с атрибутом data-test="цена карты недвижимости».
Дополнительные данные, такие как количество спален, ванных комнат и квадратных метров, вложены в <ul> списки.
Вот как мы анализируем отдельные объявления о недвижимости:
class ListingParser:
@staticmethod
async def extract_listing_details(listing) -> Optional[Dict]:
try:
data_container = await listing.query_selector(
'div[class*="property-card-data"]'
)
if not data_container:
return None
# Extract basic details
details = {
"address": None,
"status": None,
"price": None,
"bedrooms": None,
"bathrooms": None,
"square_feet": None,
"listing_company": None,
"url": None,
}
# Get address
if address_elem := await data_container.query_selector(
'address[data-test="property-card-addr"]'
):
details["address"] = ListingParser.clean_text(
await address_elem.text_content()
)
# Get price
if price_elem := await data_container.query_selector(
'span[data-test="property-card-price"]'
):
details["price"] = ListingParser.clean_text(
await price_elem.text_content()
)
# Get property URL
if url_elem := await data_container.query_selector(
'a[data-test="property-card-link"]'
):
if url := await url_elem.get_attribute("href"):
details["url"] = (
f"<https://www.zillow.com>{url}"
if not url.startswith("http")
else url
)
# ...
return details
except Exception as e:
logger.error(f"Error extracting listing details: {e}")
return None
5. Прокрутка и разбивка результатов на страницы
Имитируйте прокрутку для динамической загрузки большего количества списков:
async def _scroll_and_get_listings(self, page):
last_count = 0
attempts = 0
MAX_ATTEMPTS = 20
while attempts < MAX_ATTEMPTS:
listings = await page.query_selector_all('article[data-test="property-card"]')
current_count = len(listings)
if current_count == last_count:
break
last_count = current_count
await page.evaluate("window.scrollBy(0, 500)")
await asyncio.sleep(1)
attempts += 1
return listings
Нажмите на следующую страницу (>) кнопка для навигации по другим страницам.

Чтобы перейти на следующую страницу, выполните следующие действия:
next_button = await page.query_selector('a[title="Next page"]:not([disabled])')
if next_button:
await next_button.click()
await asyncio.sleep(3)
6. Сохранить извлеченные данные
Сохраните очищенные данные Zillow в файл JSON. Вы также можете преобразовать его в CSV позже.
class ResultsSaver:
@staticmethod
def save_results(data, filename="zillow_listings.json"):
with open(filename, "w", encoding="utf-8") as file:
json.dump(data, file, indent=4, ensure_ascii=False)
logger.info(f"Saved {len(data)} listings")
@staticmethod
def load_existing_results(filename="zillow_listings.json"):
try:
if os.path.exists(filename):
with open(filename, "r", encoding="utf-8") as file:
return json.load(file)
except Exception as e:
logger.error(f"Error loading data: {e}")
return []
7. Выполните скрепер
Объедините все это в одну основную функцию, чтобы запустить парсер, извлечь данные и сохранить результаты.
async def main():
search_url = "https://www.zillow.com/chicago-il/"
max_pages = None # Set to a number to limit pages
async with AsyncZillowSearchScraper(headless=False) as scraper:
results = await scraper.scrape_search_results(search_url, max_pages=max_pages)
print(f"\\nTotal listings scraped: {len(results)}")
if results:
print("\\nSample listing:")
print(json.dumps(results[0], indent=2, ensure_ascii=False))
if __name__ == "__main__":
asyncio.run(main())
Образец выходных данных
После успешной настройки и запуска парсера Zillow с использованием прокси Massive результат будет выглядеть примерно так:
[
{
"address": "722 N Trumbull Ave, Chicago, IL 60624",
"status": "Active",
"price": "$399,000",
"bedrooms": "5",
"bathrooms": "3",
"square_feet": "2250",
"listing_company": "REMAX LEGENDS",
"url": "https://www.zillow.com/homedetails/722-N-Trumbull-Ave-Chicago-IL-60624/3810331_zpid/",
}
]
Теперь данные структурированы и удобны для использования — они идеально подходят для аналитики недвижимости, информационных панелей или инвестиционных инструментов.
Вы можете получить доступ к полному коду для очистки данных Zillow с помощью прокси Massive в Суть GitHub.
Заключение
Сбор данных о недвижимости Zillow дает вам преимущество в понимании рынка, отслеживании недвижимости и инструментах автоматизации зданий. С помощью прокси-серверов Massive для резидентов вы можете:
- Очищайте данные без блокировки
- Ориентируйтесь на определенные почтовые индексы или города
- Автоматизируйте рабочий процесс с результатами поиска Zillow
- Извлеките чистые структурированные данные о недвижимости Zillow
Готовы создать свой собственный очиститель данных Zillow? Подпишитесь на массивные прокси сегодня.

Я являюсь соучредителем и генеральным директором Massive. Помимо работы над стартапами, я музыкант, спортсмен, ментор, ведущий мероприятий и волонтер.