CoderCastrov logo
CoderCastrov
Анализ данных

Как скрапить данные с Zillow и извлечь из них информацию?

Как скрапить данные с Zillow и извлечь из них информацию?
просмотров
4 мин чтение
#Анализ данных
Table Of Content

    Рынок недвижимости всегда был одной из самых динамичных сфер, где данные играют важную роль для владельцев, продавцов и клиентов. Вы когда-нибудь задумывались "Где и как получить наборы данных о недвижимости?". Конечно, существует множество наборов данных, которые можно бесплатно скачать или купить. Однако, если вы хотите применить свои навыки программирования для извлечения данных из доступных веб-страниц, давайте двигаться дальше и вместе изучить эту задачу.

    В этой статье мы будем скрапить данные с Zillow.com с использованием языка программирования Python. Для этого можно использовать несколько библиотек, но сегодня мы начнем с requests и Beautiful Soup.

    Весь процесс скрапинга веб-страницы заключается в отправке HTTP-запроса на URL веб-страницы, с которой мы хотим получить данные, после чего будет возвращено HTML-содержимое веб-страницы. После создания вложенной/деревянной структуры HTML с помощью парсера, мы можем начать навигацию и поиск нужных нам шаблонов.

    Шаги, включенные в скрапинг веб-страницы:

    pip install requests pip install bs4
    1. Теперь давайте импортируем эти библиотеки:
    **import** requests**from** bs4 **import **BeautifulSoup 
    1. Загрузите веб-страницу с помощью get() из пакета requests:
    • Получите URL результатов поиска: (в этом случае я взял пример поиска домов в Реддинге, Калифорния)
    zillow_url** = “**[**https://www.zillow.com/homes/Redding,-CA_rb/**](https://www.zillow.com/homes/Redding,-CA_rb/)**”**
    • Zillow выдает страницу с капчей, когда мы пытаемся запросить ее. Мы можем решить эту проблему, предоставив заголовки (в этой статье не рассматривается, где найти заголовки):
    header =** **{“User-Agent”:”Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"}
    • Теперь давайте загрузим веб-страницу:
    response = requests.get(zillow_url, headers = header )
    1. Чтобы проверить статус нашего запроса, мы можем использовать status_code:
    response.status_code

    Предположим, что он возвращает 200, что означает, что запрос выполнен успешно. Если он возвращает 404, это означает, что страница не найдена. Если вы получаете 404, вернитесь к предыдущим шагам и перепроверьте заголовок.

    1. Теперь давайте создадим "суп", разбирая HTML-содержимое с помощью двух аргументов:
    soup = BeautifulSoup(response.content, ‘html.parser’)

    Где:

    • response.content: сырое HTML-содержимое
    • ‘html.parser’: указание парсера HTML, который мы хотим использовать, например html5lib, lxml, html.parser и т.д.
    1. Поиск и навигация по некоторым шаблонам через дерево разбора:

    Прежде чем продолжить, мы можем просмотреть HTML-содержимое веб-страницы с помощью метода soup.prettify().

    Еще один более простой способ просмотра шаблонов - использовать инспектор непосредственно на веб-сайте. Перейдите на веб-сайт, щелкните правой кнопкой мыши на шаблоне, который вы хотите извлечь, и выберите inspect (в этом примере я хочу извлечь цену):

    Это покажет нам окно элемента веб-страницы, которое будет выглядеть следующим образом:

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

    • Выведите заголовок страницы:
    print(soup.title)

    Когда мы используем команду .title, она поможет нам найти заголовок веб-страницы, которую мы скрапим.

    • Используйте find_all(), чтобы найти общий шаблон, потому что он возвращает список всех совпадающих элементов:
    houses = soup.find_all(“div”, class_ = “list-card-info”)
    • Затем используйте for loop через этот шаблон и используйте find(), чтобы извлечь адрес, цену, ссылки и детали каждого дома:
    address = house.find(“address”, {“class”:”list-card-addr” }).textprice = house.find(“div”, {“class”:”list-card-price” }).textdetail = house.find(“ul”, {“class”:”list-card-details” }).textlink = house.a[“href”]

    В конце мы можем сохранить все наши данные в фрейм данных и сохранить его в формате CSV с помощью to_csv(). Наш код будет выглядеть так:

    Примечание: Почему я использовал "try" и "except" в цикле for? Потому что иногда мы получаем значения None, если не используем except, они будут возвращены как ошибка.

    Вот как выглядят наши данные:

    Из этого можно извлечь различные способы получения информации из данных о недвижимости, например:

    Я запустил тот же код, но для разных городов и сохранил полученные данные.

    💥 БА-БАХ!

    **Рисунок. 1. Средняя цена продажи домов в шести городах на 27.10.2021**

    На этом графике показана средняя цена шести городов, включая Реддинг, Андерсон, Коттонвуд, Ред Блафф, Корнинг и Орландо. Как видим, средняя цена продажи в Орландо была самой высокой на 27.10.2021. Теперь представьте, что у вас есть эти данные, но за весь год и для разных городов в разных штатах, мы сможем представить, как меняются цены на дома через годы.

    Вот и все, ребята! Мы только что рассмотрели простой пример создания веб-скрейпера для сферы недвижимости на Python. Отсюда вы можете скрапить более подробные данные со страницы Zillow или любого другого веб-сайта по вашему выбору. Не замечательно ли, что теперь вы можете идти туда и скрапить содержимое, которое вам нравится? Чем больше раз вы попробуете, тем больше информации вы получите! Но если вы столкнетесь с трудностями при скрапинге, не сдавайтесь и возвращайтесь сюда; мы обсудим больше.

    Вы можете найти весь код: здесь, удачи в скрапинге 😀!

    ПРИМЕЧАНИЕ: обновление на 2022 год, вышеуказанный код больше не работает для веб-сайта Zillow из-за некоторых изменений в их веб-структуре. Однако у меня есть обновление здесь, которое представляет те же шаги, что и выше, но на основе их новой веб-структуры.