L'estrazione di informazioni sugli immobili da Zillow può offrire un'analisi perfetta del mercato e degli investimenti. Questo post si propone di discutere lo scraping degli annunci immobiliari di Zillow con Python e si concentra sui passi essenziali da compiere e sulle linee guida. Questa guida vi mostrerà come raschiare le informazioni dal sito web di Zillow utilizzando librerie come requests e lxml.
Prima di iniziare, assicuratevi di avere installato Python sul vostro sistema. È inoltre necessario installare le seguenti librerie:
pip install requests
pip install lxml
Per estrarre dati da Zillow, è necessario comprendere la struttura della pagina web. Aprite la pagina di un annuncio immobiliare su Zillow e ispezionate gli elementi che volete estrarre (ad esempio, il titolo dell'immobile, il prezzo di stima dell'affitto e il prezzo di valutazione).
Titolo:
Dettagli sul prezzo:
Ora inviamo le richieste HTTP. Per prima cosa, dobbiamo recuperare il contenuto HTML della pagina di Zillow. Useremo la libreria requests per inviare una richiesta HTTP GET all'URL di destinazione. Impostiamo anche le intestazioni della richiesta per imitare una richiesta reale del browser e usiamo i proxy per evitare il blocco dell'IP.
import requests
# Definire l'URL di destinazione per l'annuncio immobiliare di Zillow
url = "https://www.zillow.com/homedetails/1234-Main-St-Some-City-CA-90210/12345678_zpid/"
# Impostare le intestazioni della richiesta per imitare una richiesta del browser
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',
}
# Opzionalmente, impostare i proxy per evitare il blocco dell'IP.
proxies = {
'http': 'http://username:password@your_proxy_address',
'https://username:password@your_proxy_address',
}
# Inviare la richiesta HTTP GET con intestazioni e proxy
response = requests.get(url, headers=headers, proxies=proxies)
response.raise_for_status() # Ensure we got a valid response
Successivamente, dobbiamo analizzare il contenuto HTML utilizzando lxml. Useremo la funzione fromstring del modulo lxml.html per analizzare il contenuto HTML della pagina web in un oggetto Element.
from lxml.html import fromstring
# Analizzare il contenuto HTML utilizzando lxml
parser = fromstring(response.text)
Ora estrarremo dati specifici come il titolo dell'immobile, il prezzo di stima dell'affitto e il prezzo di valutazione utilizzando query XPath sul contenuto HTML analizzato.
# Estrazione del titolo della proprietà tramite XPath
title = ' '.join(parser.xpath('//h1[@class="Text-c11n-8-99-3__sc-aiai24-0 dFxMdJ"]/text()'))
# Estrazione del prezzo di stima dell'affitto dell'immobile tramite XPath
rent_estimate_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-2]
# Estrazione del prezzo di valutazione dell'immobile tramite XPath
assessment_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-1]
# Memorizzare i dati estratti in un dizionario
property_data = {
'title': title,
'Rent estimate price': rent_estimate_price,
'Assessment price': assessment_price
}
Infine, salveremo i dati estratti in un file JSON per un'ulteriore elaborazione.
import json
# Definire il nome del file JSON di output
output_file = 'zillow_properties.json'
# Aprire il file in modalità di scrittura e fare il dump dei dati
with open(output_file, 'w') as f:
json.dump(all_properties, f, indent=4)
print(f"Scraped data saved to {output_file}")
Per effettuare lo scraping di più annunci immobiliari, itereremo su un elenco di URL e ripeteremo il processo di estrazione dei dati per ciascuno di essi.
# Elenco degli URL da raschiare
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/"
]
# Elenco per memorizzare i dati di tutti gli immobili
all_properties = []
for url in urls:
# Inviare la richiesta HTTP GET con intestazioni e proxy
response = requests.get(url, headers=headers, proxies=proxies)
response.raise_for_status() # Ensure we got a valid response
# Analizzare il contenuto HTML utilizzando lxml
parser = fromstring(response.text)
# Estrarre i dati con 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]
# Memorizzare i dati estratti in un dizionario
property_data = {
'title': title,
'Rent estimate price': rent_estimate_price,
'Assessment price': assessment_price
}
# Aggiungere i dati della proprietà all'elenco
all_properties.append(property_data)
Ecco il codice completo per scrapare i dati delle proprietà di Zillow e salvarli in un file JSON:
import requests
from lxml.html import fromstring
import json
# Definire gli URL di destinazione per gli annunci immobiliari di 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/"
]
# Impostare le intestazioni della richiesta per imitare una richiesta del browser
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',
}
# Opzionalmente, impostare i proxy per evitare il blocco dell'IP.
proxies = {
'http': 'http://username:password@your_proxy_address',
'https': 'https://username:password@your_proxy_address',
}
# Elenco per memorizzare i dati di tutte le proprietà
all_properties = []
for url in urls:
try:
# Inviare la richiesta HTTP GET con intestazioni e proxy
response = requests.get(url, headers=headers, proxies=proxies)
response.raise_for_status() # Ensure we got a valid response
# Analizzare il contenuto HTML utilizzando lxml
parser = fromstring(response.text)
# Estrarre i dati con 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]
# Memorizzare i dati estratti in un dizionario
property_data = {
'title': title,
'Rent estimate price': rent_estimate_price,
'Assessment price': assessment_price
}
# Aggiungere i dati della proprietà all'elenco
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}")
# Definire il nome del file JSON di output
output_file = 'zillow_properties.json'
# Aprire il file in modalità di scrittura e fare il dump dei dati
with open(output_file, 'w') as f:
json.dump(all_properties, f, indent=4)
print(f"Scraped data saved to {output_file}")
Comprendendo la struttura delle pagine HTML e sfruttando potenti librerie come requests e lxml, è possibile estrarre in modo efficiente i dettagli degli immobili. L'utilizzo di proxy e User-Agent a rotazione consente di effettuare un grande volume di richieste a siti come Zillow senza il rischio di essere bloccati. Per queste attività, i proxy ISP statici o i proxy residenziali a rotazione sono considerati scelte ottimali.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Commenti: 0