Витяг інформації про нерухомість із 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.com!
Коментарі: 0