ua
English
Español
中國人
Tiếng Việt
Deutsch
Português
Français
भारतीय
Türkçe
한국인
Italiano
Gaeilge
اردو
Indonesia
Polski Витяг інформації про нерухомість із 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 проксі або ротаційні резидентські проксі-сервери.
Коментарі: 0