Инструменты очистки данных для очистки данных о недвижимости с использованием Python

Опубликовано: 2019-08-12
Оглавление показать
Зачем сканировать данные с сайтов недвижимости?
Как очистить данные о недвижимости с помощью Python?
Где находится «Кодекс»?
Код Пояснение
Некоторые из списков домов, которые мы соскребали
Сбор данных о недвижимости в больших масштабах

Ведущие мировые сайты по недвижимости — кладезь ценных данных. База данных любого популярного сайта недвижимости США может содержать информацию о более чем 100 миллионах домов. Эти дома включают те, которые выставлены на продажу, сдаются в аренду или даже те, которых в настоящее время нет на рынке. Сбор данных о недвижимости также предоставляет данные об аренде и оценках собственности, которые также называются «Zestimates». Это помогает владельцам, а также клиентам лучше планировать, пытаясь оценить цены на недвижимость в ближайшие годы.

Когда дело доходит до покупки или аренды недвижимости, мы знаем, что первое, что приходит на ум, — это сравнение цен. Эти сайты для жилья предоставляют сравнение цен со всеми объявлениями в этом районе, а также основную информацию, такую ​​​​как тип дома, количество комнат, размер, краткое описание и т. д.

Зачем сканировать данные с сайтов недвижимости?

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

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

Как очистить данные о недвижимости с помощью Python?

Если вы следили за любой из наших предыдущих статей «Как сканировать или экранировать», возможно, у вас уже есть необходимые настройки на ваших компьютерах. Если вы этого не сделали, я рекомендую вам следовать этой статье, чтобы настроить python для очистки данных, его пакеты и текстовый редактор, прежде чем вы сможете запачкать руки кодом.

Где находится «Кодекс»?

Без лишних слов мы решили предоставить вам код для очистки данных о недвижимости с помощью Python, который поможет вам извлечь информацию с веб-сайта со списком недвижимости. Код сканирования данных написан на Python, и впоследствии я покажу вам, как его запустить и что вы получите после его запуска.

[язык кода = «питон»]
#!/usr/бин/питон
# -*- кодировка: utf-8 -*-

импортировать urllib.request
импортировать urllib.parse
импортировать urllib.error
из bs4 импортировать BeautifulSoup
импорт SSL
импортировать json
импортировать
импорт ОС
из запроса импорта urllib.request, urlopen

# Для игнорирования ошибок сертификата SSL

ctx = ssl.create_default_context()
ctx.check_hostname = Ложь
ctx.verify_mode = ssl.CERT_NONE

# Ввод от пользователя

url = input('Введите URL-адрес листинга Zillow House- ')

# Заставить веб-сайт поверить, что вы заходите на него с помощью браузера Mozilla

req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
веб-страница = urlopen(req).read()

# Создание объекта BeautifulSoup html-страницы для удобного извлечения данных.

суп = BeautifulSoup (веб-страница, 'html.parser')
html = суп.prettify('utf-8')
свойство_json = {}
property_json['Details_Broad'] = {}
property_json['Адрес'] = {}

# Извлечение заголовка списка свойств

для заголовка в soap.findAll('title'):
property_json['Заголовок'] = title.text.strip()
ломать

для мета в супе.findAll('meta', attrs={'name': 'description'}):
property_json['Detail_Short'] = мета['content'].strip()

для div в супе.findAll('div', attrs={'class': 'усечено количество символов'}):
property_json['Details_Broad']['Описание'] = div.text.strip()

for (i, script) в enumerate(soup.findAll('script',
attrs={'тип': 'приложение/ld+json'})):
если я == 0:
json_data = json.loads (сценарий.текст)
property_json['Details_Broad']['Количество комнат'] = json_data['numberOfRooms']
property_json['Details_Broad']['Размер этажа (в квадратных футах)'] = json_data['floorSize']['value']
property_json['Адрес']['Улица'] = json_data['адрес']['streetAddress']
property_json['Address']['Locality'] = json_data['address']['addressLocality']
property_json['Адрес']['Регион'] = json_data['адрес']['адресРегион']
property_json['Адрес']['Почтовый индекс'] = json_data['адрес']['почтовый индекс']
если я == 1:
json_data = json.loads (сценарий.текст)
property_json['Цена в $'] = json_data['предложения']['цена']
property_json['Изображение'] = json_data['изображение']
ломать

с open('data.json', 'w') в качестве выходного файла:
json.dump(property_json, outfile, отступ=4)

с open('output_file.html', 'wb') в виде файла:
файл.записать(html)

print ('———- Извлечение данных завершено. Проверить файл json.———-')
[/код]

Чтобы запустить приведенный выше код, вам нужно сохранить его в файле с расширением, например, propertyScraper.py. Как только это будет сделано, из терминала запустите команду –

[язык кода = «питон»]
свойство PythonScraper.py
[/код]

Когда вы запустите его, вам будет предложено ввести URL-адрес списка свойств. Это веб-страница, которая будет фактически сканироваться программой в поисках данных. Мы использовали две ссылки и собрали данные двух свойств. Вот ссылки -

  1. https://www.zillow.com/homedetails/638-Grant-Ave-North-Baldwin-NY-11510/31220792_zpid/
  2. https://www.zillow.com/homedetails/10-Walnut-St-Arlington-MA-02476/56401372_zpid/

Файлы JSON, полученные при запуске кода, приведенного в следующем подразделе.

Код Пояснение

Прежде чем перейти к тому, как работает код и что он возвращает, важно понять сам код. Как обычно, мы сначала нажимаем на указанный URL-адрес и захватываем весь HTML-код, который мы преобразуем в красивый суп-объект. Как только это будет сделано, мы извлечем определенные элементы div, сценарии, заголовки и другие теги с определенными атрибутами. Таким образом, мы можем точно определить конкретную информацию, которую мы можем захотеть извлечь со страницы.

Вы можете видеть, что мы также извлекли ссылку на изображение для каждого свойства. Это было сделано преднамеренно, поскольку для чего-то вроде недвижимости изображения имеют такую ​​же ценность, как и другая информация. Хотя мы действительно извлекли несколько полей со страниц со списком объектов недвижимости, следует отметить, что HTML-страница содержит намного больше точек данных. Поэтому мы также сохраняем HTML-контент локально, чтобы вы могли просматривать его и сканировать дополнительную информацию.

Некоторые из списков домов, которые мы соскребали

Как мы упоминали ранее, мы просканировали несколько списков свойств, чтобы показать вам, как данные, извлеченные Python, будут выглядеть в формате JSON. Кроме того, мы упомянули свойство, для которого предназначен конкретный JSON, в разделе JSON. Теперь давайте поговорим о точках данных, которые мы очистили.

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

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

[язык кода = «питон»]
{
«Подробности_Общие»: {
«Количество комнат»: 4,
«Размер этажа (в квадратных футах)»: «1728»
},
"Адрес": {
«Улица»: «638 Грант Авеню»,
«Местность»: «Северный Болдуин»,
«Регион»: «NY»,
«Почтовый индекс»: «11510»
},
«Название»: «638 Grant Ave, North Baldwin, NY 11510 | МЛС № 3137924 | Зиллоу»,
«Detail_Short»: «638 Grant Ave, North baldwin, NY 11510-1332 — дом на одну семью, выставленный на продажу за 299 000 долларов. Дом площадью 1728 кв. Футов состоит из 4 спален и 2 ванных комнат. Найдите 31 фотографию дома по адресу 638 Grant Ave на Zillow. Просматривайте дополнительные сведения о недвижимости, историю продаж и данные Zestimate на Zillow. МЛС № 3137924»,
«Цена в $»: 299000,
«Изображение»: «https://photos.zillowstatic.com/p_h/ISzz1p7wk4ktye1000000000.jpg»
}
[/код]

[язык кода = «питон»]
{
«Подробности_Общие»: {
«Описание»: «Трехкомнатный дом для одной семьи, расположенный в районе Арлингтон Брэттл между Арлингтон-Хайтс и Арлингтон-центром. Построенный в 1920-х годах, этот дом предлагает красивые старинные детали, полы из твердого дерева, потолочные балки, гостиную с камином и отдельной солнечной террасой, формальную столовую, три большие спальни, кабинет и две полноценные ванные комнаты. Потенциал улучшения этого свойства для расширения жилой площади и персонализации по вашему личному вкусу является исключительным. Рядом с пригородным велосипедным маршрутом Minuteman, автобусными маршрутами Rt 77 и 79, школами, магазинами и ресторанами. Виртуальная постановка и фотографии виртуального ремонта, которые помогут вам визуализировать»,
«Количество комнат»: 4,
«Размер этажа (в квадратных футах)»: «2224»
},
"Адрес": {
«Улица»: «Волнат-стрит, 10»,
«Местность»: «Арлингтон»,
«Регион»: «MA»,
«Почтовый индекс»: «02476»
},
«Заголовок»: «10 Walnut St, Arlington, MA 02476 | МЛС № 72515880 | Зиллоу»,
«Detail_Short»: «10 Walnut St , Arlington, MA 02476-6116 — дом для одной семьи, выставленный на продажу за 725 000 долларов. Дом площадью 2224 кв. Фута состоит из 4 спален и 2 ванных комнат. Найдите 34 фотографии дома по адресу 10 Walnut St на Zillow. Просматривайте дополнительные сведения о недвижимости, историю продаж и данные Zestimate на Zillow. МЛС № 72515880»,
«Цена в $»: 725000,
«Изображение»: «https://photos.zillowstatic.com/p_h/ISifzwig3xt2re1000000000.jpg»
}
[/код]

[язык кода = «питон»]
{
«Подробности_Общие»: {
«Количество комнат»: 4,
«Размер этажа (в квадратных футах)»: «1728»
},
"Адрес": {
«Улица»: «638 Грант Авеню»,
«Местность»: «Северный Болдуин»,
«Регион»: «NY»,
«Почтовый индекс»: «11510»
},
«Название»: «638 Grant Ave, North Baldwin, NY 11510 | МЛС № 3137924 | Зиллоу»,
«Detail_Short»: «638 Grant Ave, North baldwin, NY 11510-1332 — дом на одну семью, выставленный на продажу за 299 000 долларов. Дом площадью 1728 кв. Футов состоит из 4 спален и 2 ванных комнат. Найдите 31 фотографию дома по адресу 638 Grant Ave на Zillow. Просматривайте дополнительные сведения о недвижимости, историю продаж и данные Zestimate на Zillow. МЛС № 3137924»,
«Цена в $»: 299000,
«Изображение»: «https://photos.zillowstatic.com/p_h/ISzz1p7wk4ktye1000000000.jpg»
}
[/код]

Сбор данных о недвижимости в больших масштабах

Используя такой код, вы можете сканировать детали, относящиеся только к нескольким конкретным объектам недвижимости. Вы можете время от времени вручную проверять интересующие вас свойства. Однако, если вы хотите настроить таргетинг на конкретный регион в США или за рубежом, вам понадобится опытный поставщик услуг веб-скрейпинга или инструменты для сбора данных, которые помогут вам собрать списки недвижимости с ряда веб-сайтов.

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

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


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