перейти к содержанию

Apartments.com — один из крупнейших сайтов по продаже квартир в США: на его счету более 4 миллионов активных объявлений об аренде по всей стране. Для инвесторов в недвижимость, управляющих недвижимостью и аналитиков данных извлечение данных с сайта Apartments.com может оказаться огромной ценностью для понимания тенденций рынка аренды, поиска сделок и проведения конкурентного анализа.

Однако у Apartments.com нет общедоступного API для доступа к данным объявлений в большом масштабе. Хотя у них есть API для прямых объявлений управляющих недвижимостью, он ограничен собственными запасами компании. Для тех, кто хочет получить с сайта обширную рыночную информацию, парсинг веб-страниц в настоящее время является лучшим подходом.

В этом подробном руководстве я расскажу о различных методах и инструментах для извлечения данных с Apartments.com, в том числе:

  • Парсинг страниц поиска в листингах
  • Парсинг отдельных страниц с подробными сведениями о листинге
  • Сбор контактной информации
  • Парсинг страниц сообщества
  • Извлечение тенденций ценообразования
  • Как избежать обнаружения ботов

Я поделюсь примерами кода с использованием Python и Node.js, а также рекомендуемыми сторонними сервисами, которые могут упростить процесс очистки. Моя цель — предоставить подробное руководство по созданию собственного веб-парсера или использованию API для извлечения ценных данных с Apartments.com.

Парсинг страниц поиска в листингах

Основной точкой входа для сбора данных Apartments.com является перечисление страниц поиска по определенному местоположению. Извлекая ключевые поля с этих страниц, вы можете составить базу данных доступных вариантов аренды с основными атрибутами, такими как адрес, спальни/ванные комнаты, стоимость аренды и т. д.

Вот несколько лучших практик парсинга страниц поиска:

Используйте почтовые индексы или районы для поиска местоположения. – Запустите парсер с поиска определенной области, а не с фильтрации по спальням, цене и т. д. Это вернет более полный набор списков.

Пролистать все результаты – Списки разбиты на страницы, по 25 результатов на страницу. Ваш парсер должен автоматически щелкнуть мышью, чтобы извлечь все страницы результатов.

Атрибуты целевых ключевых данных – Основные поля для извлечения включают название, адрес, спальни, ванные комнаты, размер, цену, удобства, контакты, ссылки на страницы с подробными сведениями и т. д.

Следите за обнаружением ботов – Apartments.com блокирует парсинг-ботов, поэтому используйте прокси, случайные задержки и другие тактики уклонения. Подробнее об этом позже.

Пример кода Python для очистки страницы поиска:

import requests
from bs4 import BeautifulSoup

# Search for Hollywood, FL rentals
url = "https://www.apartments.com/hollywood-fl/"

# Page through all results   
for page in range(1, 10):

  # Construct page URL
  url_with_page = f"{url}?page={page}"

  # Fetch page HTML
  response = requests.get(url_with_page)

  # Parse HTML with BeautifulSoup  
  soup = BeautifulSoup(response.content, "html.parser")

  # Extract data from result cards
  cards = soup.find_all("div", class_="property-card")

  for card in cards:
    address = card.find("div", class_="property-address").text.strip()
    title = card.find("div", class_="property-title").text.strip() 

    bedrooms = card.find("div", class_="bed-range").text.strip()
    bathrooms = card.find("div", class_="bath-range").text.strip()

    size = card.find("div", class_="sqft").text.strip()
    price = card.find("div", class_="property-pricing").text.strip()

    amenities = [item.text for item in card.find_all("span", class_="amenity-text")]

    # Print extracted data
    print(f"Address: {address}")
    print(f"Title: {title}")
    print(f"Bedrooms: {bedrooms}") 
    print(f"Bathrooms: {bathrooms}")
    # And so on...

    # Follow link to detail page for more data
    detail_url = card.find("a")["href"]

Здесь рассматриваются основы очистки страниц поиска — перебор каждой страницы результатов, анализ HTML с помощью BeautifulSoup и извлечение ключевых атрибутов из каждой карточки листинга. Тот же подход работает для любого поиска по местоположению на сайте.

Парсинг отдельных страниц с подробными сведениями (описанный далее) может предоставить гораздо более подробные данные для каждого листинга.

Парсинг отдельных страниц с подробными сведениями о листинге

Хотя страницы поиска по листингу предоставляют сводную информацию об основных атрибутах, очистка отдельной страницы с подробными сведениями для каждого объекта недвижимости может обнаружить более 100 дополнительных полей. Сюда входит подробная информация об удобствах, условиях/ограничениях аренды, информация о школьном округе, сопоставимая арендная плата и многое другое.

Однако для получения и анализа тысяч страниц сведений требуется более сложная логика, чтобы избежать обнаружения ботов. Вот несколько советов:

  • Добавить случайные задержки между запросами страниц
  • Ограничение запросов до нескольких страниц в минуту
  • Ротация пользовательских агентов и прокси варьировать отпечатки пальцев
  • Поддерживать сеансы по запросам страниц
  • Повторить неудачные запросы между комбинациями прокси/пользовательского агента

Эта дополнительная сложность заключается в том, что использование коммерческого API для парсинга веб-страниц может существенно помочь. Такие сервисы, как BrightData, ScrapingBee или ScraperAPI, автоматически обрабатывают ротацию прокси, рандомизацию отпечатков браузера и логику повторных попыток.

Например, вот пример кода Python для очистки страницы сведений с помощью API BrightData:

import brightdata
from brightdata.utils import *

brightdata = BrightData(‘YOUR_API_KEY‘)

detail_url = "https://www.apartments.com/the-wilton-hollywood-fl/eqr0wdq/" 

scraper = brightdata.Scraper(
    task_name=‘apartments.com‘,
    proxy_groups=‘residential‘
)

page = scraper.get(url=detail_url)
soup = BeautifulSoup(page.content, ‘html.parser‘)

title = soup.find("h1", class_="property-title").text.strip()
address = soup.find("div", class_="property-address").text.strip()

description = soup.find("div", class_="content-block description").text.strip() 

# And so on...

brightdata.close()

Обрабатывая прокси-серверы и сеансы браузера «под капотом», подобные API позволяют легко очищать многие страницы с подробными сведениями о листингах, не подвергаясь блокировке.

Сбор контактной информации

Одна из самых ценных данных на сайте Apartments.com — это номер телефона и контактная информация для каждого объявления. Однако эта информация отображается только в виде простого HTML для вошедших в систему пользователей.

Чтобы получить доступ к контактной информации в масштабе, вам необходимо:

  1. Программное создание учетных записей – Уникальные учетные записи для каждого экземпляра парсера

  2. Войдите в систему перед парсингом – Поддерживать сеансы входа в систему при запросах страниц.

  3. Разбор полей контактов – Извлечение информации из заблокированных атрибутов

Опять же, такие сервисы, как BrightData, предлагают встроенную поддержку для программного создания учетных записей и входа в них. API незаметно обрабатывает файлы cookie, сеансы, капчи и т. д., поэтому вы можете сосредоточиться на извлечении данных.

Вот пример использования API Puppeteer в Node.js:

const { PuppeteerHandler } = require(‘brightdata‘);

const handler = new PuppeteerHandler({
  launchOptions: {
    headless: true,
  },
});

const page = await handler.newPage();

// Create and log into account
await page.goto(‘https://www.apartments.com/‘);
await page.click(‘[data-modal-trigger="register"]‘); 
// ...register form submit logic

// Now logged in, scrape contact info 
await page.goto(‘https://www.apartments.com/the-wilton-hollywood-fl/eqr0wdq/‘);

const title = await page.$eval(‘h1‘, el => el.innerText); 
const phone = await page.$eval(‘.phone-number‘, el => el.innerText);

console.log({ title, phone });

await handler.close();

Наличие номера телефона и других контактных данных позволит напрямую связаться с управляющими недвижимостью.

Парсинг страниц сообщества

Помимо отдельных объявлений, на сайте Apartments.com есть подробные страницы «сообщества» для каждого объекта недвижимости с несколькими арендаторами. Они содержат дополнительную информацию, например:

  • Имя управляющего недвижимостью
  • Общее количество единиц
  • Год постройки:
  • Принимаемые формы оплаты
  • Школьный округ
  • Отзывы жителей
  • Демографический таргетинг
  • Историческая доступность %

Эти данные обеспечивают полезную рыночную ситуацию вокруг каждого арендного сообщества. Чтобы извлечь его, вам необходимо:

  1. Запишите URL-адрес сообщества с каждой страницы листинга.
  2. Перебирайте URL-адреса сообщества, чтобы получить каждую страницу.
  3. Используйте надежную конфигурацию скребка, чтобы избежать блоков.
  4. Анализ разделов страницы, таких как «Факты и особенности», «Опыт проживания» и т. д.

Например:

# After scraping all listing detail pages

community_urls = [] 

for listing in all_listings:
  community_url = listing[‘community_url‘]
  community_urls.append(community_url)

community_urls = list(set(community_urls)) # dedup 

for url in community_urls:

  page = brightdata_scraper.get(url) # proxy rotation, retries, etc

  soup = BeautifulSoup(page.content, ‘html.parser‘)

  facts = soup.find("div", {"data-name": "Facts and Features"})

  property_manager = facts.find("div", class_="manager")
  total_units = facts.find("div", class_="totalUnits") 

  # And so on...

Сбор данных сообщества вместе с вашим листинговым инвентарем обеспечивает более глубокий анализ рынка.

Основная ценность парсера Apartments.com — выявление тенденций в арендных ставках с течением времени. Повторно извлекая данные о листинге ежедневно или еженедельно, вы можете собрать динамическую историю цен для каждой единицы.

Это включает в себя:

  • Хранение снимков листинг данных с течением времени
  • Дедупликация на основе адреса
  • Анализ изменения цен для каждого идентификатора объявления

Например, вы можете создавать ежедневные отчеты о средних ценах по рынкам:

Date         | Atlanta Avg | Dallas Avg | Phoenix Avg
-----------------------------------------------------
2022-01-01   | $1800       | $2200      | $2100
2022-01-02   | $1850       | $2300      | $2000  
2022-01-03   | $1875       | $2400      | $1975

Применительно к конкретному городу или району тенденции ценообразования могут сигнализировать о возможностях приобретения недвижимости по ценам ниже рыночных. Они также помогают вести переговоры о продлении аренды.

Как избежать обнаружения ботов

Самая большая проблема при масштабном парсинге Apartments.com — избежать обнаружения ботов. Сайт активно пытается блокировать парсинг-ботов посредством:

  • Черные списки IP
  • Дактилоскопия браузера
  • Анализ поведения человека
  • CAPTCHA проблемы

Вот несколько рекомендаций, позволяющих максимально увеличить время безотказной работы парсинга:

  • Используйте выделенные резидентные прокси – Избегайте общих IP-адресов, помеченных для очистки.
  • Ограничение запросов до нескольких страниц в минуту
  • Рандомизировать пользовательские агенты по каждому запросу
  • Фактический рендеринг браузера – Могут быть обнаружены API или безголовые браузеры
  • Внедряйте человеческие задержки между действиями
  • Часто меняйте прокси и браузеры – Меняйте отпечатки пальцев

Прокси-сервисы высшего уровня, такие как BrightData, SmartProxy и GeoSurf (для домашних IP-адресов), специально созданы для таких сложных сайтов, как Apartments.com. Они облегчают уклонение благодаря автомасштабированию, самовосстанавливающимся браузерам и реальным мобильным IP-адресам.

При наличии правильных инструментов и мер предосторожности можно успешно извлечь большие объемы данных с Apartments.com. Сочетание атрибутов страницы с подробными сведениями, контактной информации, данных сообщества и тенденций ценообразования может дать мощную информацию о рынке аренды.

Заключение

В этом руководстве я рассмотрел различные методы масштабного извлечения данных с Apartments.com, в том числе:

  • Парсинг результатов поиска и страниц с подробными сведениями
  • Захват контактной информации
  • Сбор данных страницы сообщества
  • Анализ ценовых тенденций с течением времени
  • Как избежать обнаружения ботов с помощью прокси и безголовых браузеров

Отсутствие общедоступного API усложняет парсинг сайта Apartments.com. Но с помощью надежных инструментов и стратегий можно создать мощные наборы данных, отражающие более широкий рынок аренды.

Всем, кто хочет получить доступ к данным Apartments.com, я рекомендую рассмотреть возможность коммерческого веб-скрапинга или прокси-сервиса. Они программно берут на себя тяжелую работу по управлению прокси-серверами, браузерами и тактикой уклонения. Это позволяет вам сосредоточиться на извлечении и структурировании данных.

Обладая некоторыми техническими навыками и необходимыми ресурсами, вы можете использовать данные Apartments.com для получения ценной информации для инвестирования в недвижимость, управления недвижимостью, финансового анализа и многого другого. Дайте мне знать, если у вас есть еще вопросы!

Присоединяйтесь к беседе

Ваш электронный адрес не будет опубликован. Обязательные поля помечены * *