В этой статье мы узнаем, как собирать списки недвижимости с помощью Python с https://www.realtor.com, чтобы создать собственный набор данных, который мы могли бы использовать для проектов Data Science или Machine Learning. Чтобы быть более конкретным, мы собираемся очистить данные о недвижимости города Нью-Йорка, поэтому, если вы хотите следовать этому руководству, перейдите на веб-сайт и найдите Нью-Йорк.

Содержимое веб-сайта не встроено в HTML-код статически, а динамически отображается путем отправки запроса POST в API Realtor.com. Затем ответ на запрос возвращает данные веб-сайта в строке в формате JSON. Поэтому наша цель — «подделать» запрос POST в нашем скрипте Python, притворившись, что мы являемся веб-сайтом, который запрашивает данные из API.

В этом уроке я буду использовать браузер Google Chrome, поэтому, если вы хотите выполнить шаги, я рекомендую вам также использовать Chrome. После того, как мы выполнили поиск Нью-Йорк на https://www.realtor.com и открыли Google Chrome Dev Tools, нажав CTRL + SHIFT + C (Windows) или COMMAND + OPTION + C (Mac) и нажав Network, а затем в Fetch/XHR мы можем увидеть, какие запросы отправляет веб-сайт, когда кто-то обращается к нему.

Если мы нажмем кнопку удаления в левом верхнем углу рядом с красной точкой, чтобы очистить консоль запроса, и прокрутим страницу вниз, чтобы нажать «Далее», вы увидите вверху запрос POST, который отправлены в API Веб-сайта.

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

С запросами POST необходимо отправить полезную нагрузку запроса, чтобы указать, какие данные мы хотим получить. Мы найдем полезную нагрузку запроса, когда нажмем на вкладку «Полезная нагрузка». Если мы хотим, чтобы полезная нагрузка запроса была в виде строки, а не в виде словаря json, мы, кроме того, должны нажать «просмотреть источник». В рамках этой конкретной полезной нагрузки запроса указано, что мы хотим получить результаты 2-й страницы веб-сайта списков недвижимости города Нью-Йорка.

Теперь, когда мы узнали, на какой URL-адрес мы должны отправить наш запрос и какую полезную нагрузку нам нужно отправить вместе с запросом, мы можем начать писать наш скрипт Python.

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

При копировании полезной нагрузки запроса в наш скрипт важно включить «r» перед строкой, поскольку строка содержит escape-символы. Затем мы загрузим полезную нагрузку запроса как объект json. Кроме того, важно определить тип контента в заголовках наших запросов.

Переменная «json_data» содержит список списков недвижимости, и теперь наша цель — извлечь из него нужную информацию. Мы собираемся перебрать каждый элемент и создадим словарь функций, который затем добавим в список, чтобы мы могли создать Pandas DataFrame.

На данный момент у нас есть DataFrame, состоящий из 18 столбцов. Однако есть один столбец, который не был бы действительно полезен, если бы мы хотели продолжить анализ нашего набора данных, и это столбец «теги», который в основном представляет собой просто список строк.

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

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

Есть три значения Dict, которые мы должны настроить для запроса. Ключи «page_index» и «seoPayload» соответствуют номеру страницы, а ключ «offset» — это число, которое увеличивается на 42 для каждой страницы.

Мы собираемся просмотреть каждую страницу и добавить данные JSON в список.

Мы создадим функцию для извлечения данных одного элемента.

Затем мы, наконец, перейдем к списку, содержащему данные JSON каждой страницы, и извлечем данные.

После запуска всех приведенных выше сценариев вы должны получить набор данных, содержащий 8652 строки и 179 столбцов.

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