Извлечение информации о недвижимости с Zillow может предоставить важные данные для анализа рынка и инвестиций. В этой статье представлен процесс скрапинга объявлений на Zillow с использованием Python, и рассмотрено, как использовать библиотеки, такие как requests и lxml, для скрапинга информации с веб-сайта Zillow, что поможет вам собирать ценные данные для анализа и принятия инвестиционных решений.
Перед началом убедитесь, что Python установлен на вашей системе. Вам также потребуется установить следующие библиотеки:
pip install requests
pip install lxml
Давайте пошагово рассмотрим процесс скрапинга:
Для успешного скрапинга данных с Zillow важно тщательно изучить структуру веб-страницы, чтобы определить, какие элементы информации могут быть извлечены. Это включает в себя название объекта недвижимости, оценочную стоимость аренды, оценочную стоимость объекта и другие важные данные.
Название позиции:
Цена:
Сначала нам нужно получить HTML-содержимое страницы Zillow. Мы будем использовать библиотеку requests для отправки HTTP GET-запроса на целевой URL. Также настроим заголовки запроса, чтобы имитировать запрос реального браузера, и используем прокси, чтобы избежать блокировки по IP.
import requests
# Определение целевого URL для объявления о недвижимости на Zillow
url = "https://www.zillow.com/homedetails/1234-Main-St-Some-City-CA-90210/12345678_zpid/"
# Настройка заголовков запроса для имитации запроса браузера
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-US,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
'sec-ch-ua-mobile': '?0',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'same-origin',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}
# Настройка прокси для избежания блокировки по IP
proxies = {
'http': 'http://username:password@your_proxy_address',
'https://username:password@your_proxy_address',
}
# Отправка HTTP GET-запроса с заголовками и прокси
response = requests.get(url, headers=headers, proxies=proxies)
response.raise_for_status() # Убедитесь, что мы получили корректный ответ
Далее нам нужно совершить парсинг HTML-содержимого с использованием библиотеки lxml. Мы будем использовать функцию fromstring из модуля lxml.html для парсинга HTML-содержимого веб-страницы в объект Element.
from lxml.html import fromstring
# Парсинг HTML-содержимого с помощью lxml
parser = fromstring(response.text)
Теперь мы извлечем конкретные данные, такие как название объекта недвижимости, оценочная цена аренды и оценочная стоимость собственности, используя XPath-запросы к HTML-содержимому парсинг которого производился ранее.
# Извлечение названия объекта недвижимости с помощью XPath
title = ' '.join(parser.xpath('//h1[@class="Text-c11n-8-99-3__sc-aiai24-0 dFxMdJ"]/text()'))
# Извлечение оценочной цены аренды с помощью XPath
rent_estimate_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-2]
# Извлечение оценочной стоимости собственности с помощью XPath
assessment_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-1]
# Сохранение извлеченных данных в словарь
property_data = {
'title': title,
'Rent estimate price': rent_estimate_price,
'Assessment price': assessment_price
}
Наконец, мы сохраним извлеченные данные в файл JSON для дальнейшей обработки.
import json
# Определение имени выходного файла JSON
output_file = 'zillow_properties.json'
# Открытие файла в режиме записи и сохранение данных
with open(output_file, 'w') as f:
json.dump(all_properties, f, indent=4)
print(f"Scraped data saved to {output_file}")
Для скрапинга множества объявлений о недвижимости необходимо выполнить итерацию по списку URL-адресов и повторять процесс извлечения данных для каждого из них.
# Список URL-адресов для скрапинга
urls = [
"https://www.zillow.com/homedetails/1234-Main-St-Some-City-CA-90210/12345678_zpid/",
"https://www.zillow.com/homedetails/5678-Another-St-Some-City-CA-90210/87654321_zpid/"
]
# Список для хранения данных всех объектов недвижимости
all_properties = []
for url in urls:
# Отправка HTTP GET-запроса с заголовками и прокси
response = requests.get(url, headers=headers, proxies=proxies)
response.raise_for_status() # Убедитесь, что мы получили корректный ответ
# Парсинг HTML-содержимого с помощью lxml
parser = fromstring(response.text)
# Извлечение данных с помощью XPath
title = ' '.join(parser.xpath('//h1[@class="Text-c11n-8-99-3__sc-aiai24-0 dFxMdJ"]/text()'))
rent_estimate_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-2]
assessment_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-1]
# Сохранение извлеченных данных в словарь
property_data = {
'title': title,
'Rent estimate price': rent_estimate_price,
'Assessment price': assessment_price
}
# Добавление данных объекта недвижимости в список
all_properties.append(property_data)
Вот финальный код для скрапинга данных о недвижимости с Zillow и сохранения их в файл JSON:
import requests
from lxml.html import fromstring
import json
# Определение целевых URL-адресов для объявлений о недвижимости Zillow
urls = [
"https://www.zillow.com/homedetails/1234-Main-St-Some-City-CA-90210/12345678_zpid/",
"https://www.zillow.com/homedetails/5678-Another-St-Some-City-CA-90210/87654321_zpid/"
]
# Настройка заголовков запроса для имитации запроса браузера
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-US,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'sec-ch-ua': '"Not/A)Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"',
'sec-ch-ua-mobile': '?0',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'same-origin',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36',
}
# Настройка прокси для избежания блокировки по IP
proxies = {
'http': 'http://username:password@your_proxy_address',
'https': 'https://username:password@your_proxy_address',
}
# Список для хранения данных всех объектов недвижимости
all_properties = []
for url in urls:
try:
# Отправка HTTP GET-запроса с заголовками и прокси
response = requests.get(url, headers=headers, proxies=proxies)
response.raise_for_status() # Убедитесь, что получен корректный ответ
# Парсинг HTML-содержимого с помощью lxml
parser = fromstring(response.text)
# Извлечение данных с помощью XPath
title = ' '.join(parser.xpath('//h1[@class="Text-c11n-8-99-3__sc-aiai24-0 dFxMdJ"]/text()'))
rent_estimate_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-2]
assessment_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-1]
# Сохранение извлеченных данных в словаре
property_data = {
'title': title,
'Rent estimate price': rent_estimate_price,
'Assessment price': assessment_price
}
# Добавление данных объекта недвижимости в список
all_properties.append(property_data)
except requests.exceptions.HTTPError as e:
print(f"HTTP error occurred: {e}")
except requests.exceptions.RequestException as e:
print(f"An error occurred: {e}")
# Определение имени выходного файла JSON
output_file = 'zillow_properties.json'
# Открытие файла в режиме записи и сохранение данных
with open(output_file, 'w') as f:
json.dump(all_properties, f, indent=4)
print(f"Scraped data saved to {output_file}")
Понимание структуры HTML страниц и использование мощных библиотек, таких как requests и lxml, позволяют эффективно извлекать детали о недвижимости. Благодаря использованию прокси и ротации User-Agent, можно выполнять большое количество запросов без риска блокировки на Zillow. Для этих целей оптимальным вариантом будут статические ISP прокси или ротационные резидентские прокси-серверы.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.ru!
Комментарии: 0