L'extraction d'informations sur les biens immobiliers à partir de Zillow peut offrir une analyse parfaite du marché et des investissements. Ce billet a pour but de discuter du scraping des listings immobiliers de Zillow avec Python où il se concentrera sur les étapes essentielles prises et les lignes directrices. Ce guide vous montrera comment extraire des informations du site Web de Zillow en utilisant des bibliothèques telles que requests et lxml.
Avant de commencer, assurez-vous que Python est installé sur votre système. Vous devrez également installer les bibliothèques suivantes :
pip install requests
pip install lxml
Pour extraire des données de Zillow, vous devez comprendre la structure de la page web. Ouvrez une page d'annonce immobilière sur Zillow et inspectez les éléments que vous souhaitez extraire (par exemple, le titre de l'immeuble, le prix estimé du loyer et le prix de l'évaluation).
Titre:
Détails du prix :
Envoyons maintenant des requêtes HTTP. Tout d'abord, nous devons récupérer le contenu HTML de la page Zillow. Nous utiliserons la bibliothèque requests pour envoyer une requête HTTP GET à l'URL cible. Nous allons également configurer les en-têtes de la requête pour imiter une vraie requête de navigateur et utiliser des proxys pour éviter le blocage d'IP.
import requests
# Définir l'URL cible pour l'annonce immobilière de Zillow
url = "https://www.zillow.com/homedetails/1234-Main-St-Some-City-CA-90210/12345678_zpid/"
# Configurer les en-têtes de la requête pour imiter la requête d'un navigateur
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',
}
# Si vous le souhaitez, vous pouvez configurer des serveurs mandataires pour éviter le blocage des adresses IP.
proxies = {
'http': 'http://username:password@your_proxy_address',
'https://username:password@your_proxy_address',
}
# Envoyer la requête HTTP GET avec les en-têtes et les proxies
response = requests.get(url, headers=headers, proxies=proxies)
response.raise_for_status() # Ensure we got a valid response
Ensuite, nous devons analyser le contenu HTML à l'aide de lxml. Nous utiliserons la fonction fromstring du module lxml.html pour analyser le contenu HTML de la page web en un objet Element.
from lxml.html import fromstring
# Analyse du contenu HTML à l'aide de lxml
parser = fromstring(response.text)
Nous allons maintenant extraire des points de données spécifiques tels que le titre du bien, le prix du loyer estimé et le prix de l'évaluation à l'aide de requêtes XPath sur le contenu HTML analysé.
# Extraction du titre de la propriété à l'aide de XPath
title = ' '.join(parser.xpath('//h1[@class="Text-c11n-8-99-3__sc-aiai24-0 dFxMdJ"]/text()'))
# Extraction du prix de l'estimation du loyer du bien immobilier à l'aide de XPath
rent_estimate_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-2]
# Extraction du prix d'évaluation d'un bien immobilier à l'aide de XPath
assessment_price = parser.xpath('//span[@class="Text-c11n-8-99-3__sc-aiai24-0 dFhjAe"]//text()')[-1]
# Stocker les données extraites dans un dictionnaire
property_data = {
'title': title,
'Rent estimate price': rent_estimate_price,
'Assessment price': assessment_price
}
Enfin, nous enregistrerons les données extraites dans un fichier JSON en vue d'un traitement ultérieur.
import json
# Définir le nom du fichier JSON de sortie
output_file = 'zillow_properties.json'
# Ouvrir le fichier en mode écriture et extraire les données
with open(output_file, 'w') as f:
json.dump(all_properties, f, indent=4)
print(f"Scraped data saved to {output_file}")
Pour récupérer plusieurs annonces immobilières, nous allons itérer sur une liste d'URL et répéter le processus d'extraction de données pour chacune d'entre elles.
# Liste des URL à récupérer
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/"
]
# Liste pour stocker les données de toutes les propriétés
all_properties = []
for url in urls:
# Envoyer la requête HTTP GET avec les en-têtes et les proxies
response = requests.get(url, headers=headers, proxies=proxies)
response.raise_for_status() # Ensure we got a valid response
# Analyse du contenu HTML à l'aide de lxml
parser = fromstring(response.text)
# Extraire des données à l'aide de 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]
# Stocker les données extraites dans un dictionnaire
property_data = {
'title': title,
'Rent estimate price': rent_estimate_price,
'Assessment price': assessment_price
}
# Ajouter les données du bien à la liste
all_properties.append(property_data)
Voici le code complet pour récupérer les données immobilières de Zillow et les enregistrer dans un fichier JSON :
import requests
from lxml.html import fromstring
import json
# Définir les URL cibles pour les annonces immobilières de 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/"
]
# Configurer les en-têtes de la requête pour imiter la requête d'un navigateur
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',
}
# Si vous le souhaitez, vous pouvez configurer des serveurs mandataires pour éviter le blocage des adresses IP.
proxies = {
'http': 'http://username:password@your_proxy_address',
'https': 'https://username:password@your_proxy_address',
}
# Liste pour stocker les données de toutes les propriétés
all_properties = []
for url in urls:
try:
# Envoyer la requête HTTP GET avec les en-têtes et les proxies
response = requests.get(url, headers=headers, proxies=proxies)
response.raise_for_status() # Ensure we got a valid response
# Analyse du contenu HTML à l'aide de lxml
parser = fromstring(response.text)
# Extraire des données à l'aide de 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]
# Stocker les données extraites dans un dictionnaire
property_data = {
'title': title,
'Rent estimate price': rent_estimate_price,
'Assessment price': assessment_price
}
# Ajouter les données du bien à la liste
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}")
# Définir le nom du fichier JSON de sortie
output_file = 'zillow_properties.json'
# Ouvrir le fichier en mode écriture et extraire les données
with open(output_file, 'w') as f:
json.dump(all_properties, f, indent=4)
print(f"Scraped data saved to {output_file}")
En comprenant la structure des pages HTML et en exploitant des bibliothèques puissantes telles que requests et lxml, vous pouvez extraire efficacement les détails des biens immobiliers. L'utilisation de proxys et de User-Agents rotatifs vous permet d'effectuer un grand nombre de requêtes sur des sites comme Zillow sans risquer d'être bloqué. Pour ces activités, les proxys statiques des FAI ou les proxys résidentiels rotatifs sont considérés comme des choix optimaux.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Commentaires: 0