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

Как очистить данные о недвижимости Zoopla на Python

Zoopla — одна из крупнейших площадок недвижимости в Великобритании, на которой представлено более 1.5 миллионов объявлений о продаже, аренде, новых домах и коммерческой недвижимости. В этом подробном руководстве, состоящем из более чем 3000 слов, мы рассмотрим различные методы создания веб-скребка, который извлекает данные о свойствах Zoopla с помощью Python.

Ценность данных Zoopla

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

Некоторые ключевые факты о Zoopla:

  • 1.5 миллиона+ объявлений – Один из крупнейших источников данных о недвижимости Великобритании.

  • 62,000 XNUMX+ агентов по недвижимости – Большинство британских агентств зарегистрированы на Zoopla.

  • 28 миллионов+ ежемесячных посещений – Высокий объем поиска и интерес.

  • Основанная в 2007 – Исторические списки за более чем десятилетие.

Этот огромный набор данных создает возможности для:

  • Анализ рынка – Определить тенденции ценообразования в разных регионах и типах недвижимости. Например, в 2022 году Средняя цена дома в Великобритании выросла на 9%.

  • Модели оценки – Оцените стоимость недвижимости, используя регрессию по историческим ценам продажи.

  • Инвестиционные исследования – Понять заполняемость, денежный поток и доходность по районам.

  • Список служб оповещений – Уведомляйте покупателей, когда новые объекты недвижимости соответствуют их критериям.

  • Приложения по недвижимости – Используйте мобильные и веб-приложения с данными о недвижимости.

  • Сравнение агентов – Анализируйте ключевые показатели эффективности продавца, такие как время пребывания на рынке.

  • Прогнозирование спроса – Прогнозировать потребности в жилье по демографическим группам.

И еще много вариантов использования! Обширность данных, доступных в Zoopla, позволяет использовать все виды приложений.

Теперь давайте посмотрим, как его извлечь.

Извлекаемые поля данных

Каждый листинг Zoopla содержит огромное количество информации. Некоторые доступные ключевые поля данных включают в себя:

Детали Объекта

  • Название Описание
  • Цена, статус объявления (продажа, сдача в аренду и т. д.)
  • Местоположение, адрес
  • Тип недвижимости (дом, квартира и т. д.)
  • Спальни, ванные комнаты
  • Размер в квадратных футах

Особенности

  • Пули подчеркивают удобства
  • Подробное описание особенностей недвижимости

Медиа

  • Фото
  • Поэтажные планы
  • 3D туры

Информация о Локации

  • Координаты карты
  • Рядом школы, остановки общественного транспорта и т. д.

подробности Агент

  • Название агентства, адрес
  • Сайт, телефоны
  • Индивидуальные контакты агента

Плюс дополнительные метаданные, такие как идентификатор листинга, дата публикации и многое другое.

Это обширный набор данных, охватывающий множество важных деталей недвижимости. Далее давайте посмотрим, как его извлечь.

Настройка парсинга веб-страниц

Чтобы создать парсер Zoopla, мы будем использовать Python вместе с несколькими ключевыми пакетами:

import requests 
from bs4 import BeautifulSoup
import json
import time
  • Запросы – Для отправки HTTP-запросов на серверы Zoopla.
  • КрасивыйСуп – Анализирует HTML-контент, чтобы мы могли извлечь данные
  • JSON – Для обработки содержимого JSON из ответов API
  • время – Полезно для добавления задержек между запросами.

Кроме того, мы можем использовать библиотеки Python, такие как URLLIB для обработки URL-адресов и многопроцессорная обработка для добавления параллелизма.

После этого импорта мы готовы начать извлечение данных!

Парсинг отдельных страниц листинга

Начнем с основной задачи — извлечения данных с одной страницы свойств.

Мы будем использовать этот пример листинга: www.zoopla.co.uk/for-sale/details/63422316

Просматривая исходный код страницы, мы видим, что Zoopla загружает данные JSON в глобальный файл. window.PAGE_MODEL переменная. Мы можем захватить его так:

import json
import requests 
from bs4 import BeautifulSoup

url = "https://www.zoopla.co.uk/for-sale/details/63422316"

page = requests.get(url)
soup = BeautifulSoup(page.content, "html.parser")

page_model = soup.find("script", id="__NEXT_DATA__")
data = json.loads(page_model.contents[0])["props"]["pageProps"]

print(data["listingDetails"].keys())

Это дает нам полные данные о листинге, в том числе:

dict_keys([‘listingId‘, ‘displayAddress‘, ‘price‘, ‘numBedrooms‘,  ‘description‘, ‘branchId‘, ‘propertyType‘, ‘listingUpdate‘, ‘numBathrooms‘, ‘floorPlan‘, ‘title‘, ‘publishedOn‘, ‘location‘, ‘outcode‘, ‘listingUri‘, ‘analyticsTaxonomy‘, ‘keyFeatures‘])

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

  • Детали, такие как цена, спальни, тип недвижимости.
  • Описание, характеристики, фото
  • Информация о местонахождении
  • Информация об агенте и агентстве

Для изображений, планов этажей и других медиафайлов JSON предоставляет URL-адреса, которые мы можем скопировать для загрузки двоичных файлов.

Теперь, когда мы можем извлекать данные из отдельных списков, давайте посмотрим, как обнаружить эти страницы.

Поиск списков для парсинга

Чтобы создать полную базу данных, нам нужно найти URL-адреса страниц Zoopla для загрузки в наш парсер. Для этого есть два основных подхода:

Парсинг результатов поиска

Zoopla предоставляет функции поиска по регионам, городам, районам и т. д.

Например, поиск «Лондон» возвращает www.zoopla.co.uk/for-sale/property/london.

Мы можем напрямую вызвать API поиска следующим образом:

import requests
import json

SEARCH_URL = "https://www.zoopla.co.uk/api/v1/search"

params = {
  "q": "London",
  "area_type": "area", 
  "page_size": 25,
  "category": "residential",
  "order": "age_high",
  "listing_status": "sale" 
}

response = requests.get(SEARCH_URL, params=params)
data = response.json()

# Extract listing URLs from API response
listings = data["listing"]

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

Мы можем перебирать страницы, используя page_number параметр. И настройте поиск с помощью таких параметров, как:

  • radius – Расстояние от места
  • order – Порядок сортировки (самый новый, самая высокая цена и т. д.)
  • listing_status — Продажа, аренда, аукцион
  • category - Жилой коммерческий

Парсинг результатов поиска позволяет нам адаптировать результаты точно под наши нужды.

Сканирование файлов Sitemap

Помимо поиска, Zoopla предоставляет список XML-файлов карты сайта. каждую Страница недвижимости с такими разделами, как продажи, аренда, новые дома и многое другое.

Индекс карты сайта находится по адресу www.zoopla.co.uk/sitemap_index.xml. Он ссылается на карты сайта для конкретных категорий:

<sitemap>
  <loc>https://www.zoopla.co.uk/for_sale_houses.xml</loc>
</sitemap>

<sitemap>
  <loc>https://www.zoopla.co.uk/for_sale_flats.xml</loc>  
</sitemap>

Мы можем проанализировать индекс и просканировать каждую карту сайта, например:

from bs4 import BeautifulSoup
import requests

sitemap_index = "https://www.zoopla.co.uk/sitemap_index.xml"

page = requests.get(sitemap_index)
soup = BeautifulSoup(page.content, "xml")

sitemaps = []

for sitemap in soup.find_all("sitemap"):
  sitemaps.append(sitemap.find("loc").text)

# Crawl each sitemap for listings  
for sitemap in sitemaps:

  page = requests.get(sitemap)
  soup = BeautifulSoup(page.content, "xml")

  for url in soup.find_all("url"):
    listing_url = url.find("loc").text

    # Add listing URL to our database
    save_listing(listing_url) 

При этом сканируются все объявления, доступные на сайте Zoopla. Компромисс по сравнению с поиском заключается в том, что у нас меньше контроля над адаптацией результатов.

Теперь, когда мы можем находить списки, давайте посмотрим, как обновлять нашу базу данных.

Отслеживание новых объявлений о недвижимости

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

Самый простой метод — очистить результаты поиска, отсортированные начиная с самых новых:

import requests
import json 

SEARCH_URL = "https://www.zoopla.co.uk/api/v1/search"

params = {
  "q": "London",
  "orderby": "age",
  "listing_status": "sale",
  "page_number": 1,
  "page_size": 100  
}

response = requests.get(SEARCH_URL, params=params)
data = response.json()

# Extract listing URLs 
new_listings = data["listing"] 

# Check if each listing already exists in our database
# Add new listings to our database

Мы можем запускать этот поиск периодически, например ежедневно, чтобы получать новые объявления по мере их публикации.

Более продвинутые подходы могут просмотреть даты последних модификаций карты сайта или очистить RSS-канал, если он доступен. Но сортировка поиска предоставляет простой метод.

Этические методы парсинга веб-страниц

При масштабном парсинге таких сайтов, как Zoopla, важно делать это с соблюдением этических и юридических норм. Некоторые ключевые принципы, которым следует следовать, включают в себя:

Соблюдайте правила robots.txt – Этот файл сообщает парсерам, к каким URL-адресам они могут или не могут получить доступ.

Проверьте API – Используйте API, если он доступен, прежде чем прибегать к очистке. Хотя API Zoopla ограничен.

Царапать разумно – Используйте задержки, регулирование, ротацию прокси, чтобы не перегружать сайт.

Избегайте личных/пользовательских данных – Не храните электронные письма, имена и т. д. без разрешения.

Кэшируйте ответственно – Временно храните очищенные данные и обновляйте их, когда они устаревают.

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

Источники кредита – Укажите правильность использования любых данных и дайте ссылку на них.

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

Теперь давайте углубимся в некоторые распространенные вопросы, связанные с парсингом Zoopla.

FAQ

Вот несколько частых вопросов о создании веб-скребка Zoopla:

Законно ли парсить Zoopla?

Парсинг общедоступных данных Zoopla, как правило, законен в соответствии с законодательством Великобритании. Просто обязательно соблюдайте этические нормы, такие как уважение к файлу robots.txt и разумное парсинг.

Могут ли у меня возникнуть проблемы из-за парсинга Zoopla?

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

Есть ли у Zoopla API, который я могу использовать?

Да, но данные ограничиваются в основном оценками. Чтобы получить полную информацию о листинге, необходим парсинг веб-страниц.

Что произойдет, если Zoopla заблокирует мой парсер?

Вы можете увидеть CAPTCHA, ошибки HTTP 403 или блокировки IP. Используйте прокси, имитацию браузера, сеансы и случайность, чтобы избежать блокировок.

Должен ли я использовать резидентные прокси или прокси для центров обработки данных?

Резидентные прокси-серверы с реальными отпечатками браузера лучше всего подходят для обхода блоков по сравнению с IP-адресами центров обработки данных, которые легче идентифицировать.

Как я могу безопасно масштабировать свой скребок?

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

Есть ли сканер, который я могу использовать вместо того, чтобы создавать свой собственный?

Да, такие услуги, как Соскоб предоставьте сканеры Zoopla, чтобы вам не приходилось создавать и поддерживать собственный парсер.

Какие есть альтернативы Zoopla?

Другие британские порталы недвижимости, такие как Rightmove, OnTheMarket и PrimeLocation, также могут быть извлечены из списков.

Заключение

Scraping Zoopla предоставляет доступ к невероятно ценному набору данных о недвижимости Великобритании. В этом руководстве из более чем 3000 слов мы рассмотрели:

  • Множество данных о листинге, которые предоставляет Zoopla

  • Извлечение чистых наборов данных со страниц свойств

  • Обнаружение списков через результаты поиска и карты сайта

  • Постоянное обновление вашей базы данных новыми объявлениями.

  • Этические соображения относительно ответственного соскоба

  • Часто задаваемые вопросы о распространенных проблемах парсинга Zoopla

Хотя парсинг Zoopla прост, масштабирование парсера требует надежной разработки — прокси, пользовательских агентов, повторных попыток, задержек модерации, случайности и многого другого.

Или, альтернативно, API-интерфейсы сканеров, такие как ScrapingBee, решают эти сложности самостоятельно, поэтому вы можете легко извлекать данные Zoopla.

В целом, я надеюсь, что это руководство предоставило вам исчерпывающую схему создания собственного веб-скребка Zoopla с использованием Python. Пожалуйста, не стесняйтесь обращаться, если у вас есть другие вопросы!

Теги:

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

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