CoderCastrov logo
CoderCastrov
Парсер

Парсинг веб-сайта с помощью Python | Как спарсить API веб-сайта недвижимости

Парсинг веб-сайта с помощью Python | Как спарсить API веб-сайта недвижимости
просмотров
3 мин чтение
#Парсер
Table Of Content

    В этой статье мы научимся парсить объявления о недвижимости с помощью 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, нажав CTRL + SHIFT + C (Windows) или COMMAND + OPTION + C (Mac), а затем выбрав «Network», а затем «Fetch/XHR», мы можем увидеть, какие запросы отправляет веб-сайт, когда к нему обращается кто-то.

    Изображение автора

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

    Изображение автора

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

    Изображение автора

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

    Изображение автора Изображение автора

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

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

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

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

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

    Изображение автора

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

    Изображение автора.

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

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

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

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

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

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

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