CoderCastrov logo
CoderCastrov
Рынок недвижимости

Как парсить рынок недвижимости

Как парсить рынок недвижимости
просмотров
4 мин чтение
#Рынок недвижимости

Краткое руководство для начинающих на Python

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

Как стажер-дата-саентист, я был уверен, что могу немного облегчить эту боль и упростить способ поиска жилья. Проект, который я придумал, направлен на выявление связей между ценой квартиры в Грэйтер Торонто (GTA), ее местоположением, площадью и количеством спален. Бизнес-идея этого проекта заключается в помощи искателям квартир в поиске лучшего предложения в разных районах GTA.

Для проведения этого проекта я решил использовать популярный веб-сайт Craiglist. Моя идея заключалась в извлечении данных с веб-сайта с помощью инструмента для парсинга веб-страниц на Python (версия 3.7.4) под названием Beautiful Soup.


Пять трендов в области Data Science и Machine Learning, которые определят перспективы работы в 2020 году | Data Driven...

Data Science и ML были одними из самых обсуждаемых трендов в 2019 году и, без сомнения, они продолжат...

www.datadriveninvestor.com

Чтобы все оставались здесь внимательными, я разделил этот проект на две части: первая часть - это парсинг веб-сайта и создание таблицы данных, а вторая часть сосредоточена на анализе и прогнозах [скоро будет готово...].

Итак, что я могу извлечь из Craiglist?

Объявления о квартирах на Craigslist для Торонто находятся по адресу https://toronto.craigslist.org/d/apts-housing-for-rent/search/apa

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

Затем я создал свой план действий в четыре шага:

· Понять данные

· Собрать данные

· Создать набор данных

· Очистить набор данных

Прежде чем приступить к каждому шагу, в этом проекте я использовал несколько пакетов Python, но расскажу только о наиболее важных. Конечно, Beautiful Soup из bs4, который является модулем для разбора HTML-кода веб-страницы, полученного с сервера. Я быстро проверил тип и длину этого элемента, чтобы убедиться, что он соответствует количеству объявлений на странице (по умолчанию 120 объявлений на странице).

Если вам интересны подробности, вот список пакетов, необходимых для этого проекта:

Понимание данных (веб-сайт)

Я использовал модуль get из пакета requests в Python. Я определил переменную response и присвоил ей метод get, вызванный на базовом URL. Что я имею в виду под "базовым URL" - это URL на первой странице, с которой вы хотите получить данные.

Объявление на Craiglist

Типичное объявление на Craigslist, полезное для подтверждения четырех полей данных: цена, площадь, местоположение, количество спален. Источник: Автор

Затем, чтобы правильно выполнить парсинг, мне нужно было понять, как организован веб-сайт. Для этого я выполнил базовый поиск на Craiglist и открыл HTML-код. Просмотрев скриншот ниже, вы увидите справа <li class="result-row">. Это тег, который нужно найти для каждого отдельного объявления; это блок, который содержит все элементы, которые мне нужны!

Веб-сайт Craiglist

Сбор данных

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

Как выглядит цикл, который я разработал для извлечения данных? Вот подробности цикла "for", который я использовал в своем проекте:

· Для каждой страницы в pages: - Если страница возвращает код состояния, отличный от 200, отправить предупреждение

· Для объявления в объявлениях: - Если информация о районе не отсутствует: - Добавить дату-время размещения объявления в список дат-времени - Добавить район объявления в список районов - Добавить заголовок объявления в список заголовков объявлений - Добавить ссылку на объявление в список ссылок - Добавить очищенную цену объявления в список цен - Добавить площадь в список площадей - Добавить количество спален в список спален

Не стесняйтесь получить полный код на GitHub, нажав здесь.

Я также включил некоторые шаги по очистке данных в цикле, такие как извлечение атрибута 'DateTime' и удаление 'ft2' из переменной площади в квадратных футах и преобразование этого значения в целое число. Кроме того, я удалил 'br' из количества спален, так как это также было спарсено.

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

Создание набора данных

После извлечения данных с помощью вышеуказанного цикла я сохранил данные в таблицу данных. Затем я отфильтровал таблицу данных следующими столбцами: Дата размещения, Район, Заголовок объявления, URL, Цена, Площадь, Количество спален.

Очистка набора данных

Затем мне нужно было дополнительно очистить набор данных, изменив класс некоторых объектов и удалив другие. Вот дополнительные шаги, необходимые для этого:

· Преобразовал строку DateTime в объект DateTime.

· Удалил символ $ и преобразовал Цену в целое число.

· Преобразовал Количество спален в класс float.

· Удалил () из столбца Район.

· Изменил отсутствующие значения в Цене и Площади на тип NaN и удалил их.

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

Теперь, когда набор данных готов к анализу.