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 для вошедших в систему пользователей.
Чтобы получить доступ к контактной информации в масштабе, вам необходимо:
Программное создание учетных записей – Уникальные учетные записи для каждого экземпляра парсера
Войдите в систему перед парсингом – Поддерживать сеансы входа в систему при запросах страниц.
Разбор полей контактов – Извлечение информации из заблокированных атрибутов
Опять же, такие сервисы, как 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 есть подробные страницы «сообщества» для каждого объекта недвижимости с несколькими арендаторами. Они содержат дополнительную информацию, например:
- Имя управляющего недвижимостью
- Общее количество единиц
- Год постройки:
- Принимаемые формы оплаты
- Школьный округ
- Отзывы жителей
- Демографический таргетинг
- Историческая доступность %
Эти данные обеспечивают полезную рыночную ситуацию вокруг каждого арендного сообщества. Чтобы извлечь его, вам необходимо:
- Запишите URL-адрес сообщества с каждой страницы листинга.
- Перебирайте URL-адреса сообщества, чтобы получить каждую страницу.
- Используйте надежную конфигурацию скребка, чтобы избежать блоков.
- Анализ разделов страницы, таких как «Факты и особенности», «Опыт проживания» и т. д.
Например:
# 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 для получения ценной информации для инвестирования в недвижимость, управления недвижимостью, финансового анализа и многого другого. Дайте мне знать, если у вас есть еще вопросы!