Outils de récupération de données pour récupérer des données immobilières à l'aide de Python
Publié: 2019-08-12Les principaux sites immobiliers du monde sont un trésor de données précieuses. La base de données de n'importe quel site immobilier américain populaire peut contenir des informations sur plus de 100 millions de maisons. Ces maisons comprennent celles à vendre, à louer ou même celles qui ne sont pas actuellement sur le marché. Le grattage des données immobilières fournit également des données pour les estimations de loyer et de propriété appelées "Zestimates". Il aide les propriétaires, ainsi que les clients, à mieux planifier en essayant d'estimer les prix des propriétés dans les années à venir.
Lorsqu'il s'agit d'acheter ou de louer des propriétés, nous savons que la première chose qui nous vient à l'esprit est la comparaison des prix. Ces sites de logement fournissent une comparaison de prix avec toutes les annonces de cette zone, ainsi que des informations de base comme le type de maison, le nombre de pièces, la taille, une courte description, etc.
Pourquoi explorer les données des sites immobiliers ?
Les grandes sociétés d'annonces immobilières ciblent une région entière et travaillent sur des millions de propriétés. Mais si vous êtes un agent immobilier, au lieu d'essayer de collecter des données manuellement par vous-même, vous pouvez mieux analyser les données d'un site Web majeur d'annonces immobilières.
Vous pouvez également créer des modèles d'apprentissage automatique pour prédire les prix des propriétés et comparer vos prévisions avec les estimations de Zillow et voir laquelle est la meilleure ou la plus proche des valeurs réelles.
Comment extraire des données immobilières à l'aide de Python ?
Si vous avez suivi l'un de nos articles précédents "Comment explorer ou scape", vous avez peut-être déjà la configuration nécessaire prête sur vos ordinateurs. Si ce n'est pas le cas, je vous recommande de suivre cet article pour configurer le python de récupération de données, ses packages et l'éditeur de texte avant de pouvoir vous salir les mains avec le code.
Où est le Code ?
Sans trop tarder, nous avons décidé de vous apporter le code de grattage des données immobilières à l'aide de python qui vous aidera à extraire des informations d'un site Web d'annonces immobilières. Le code d'exploration de données est écrit en Python et par la suite, je vous montrerai comment l'exécuter et ce que vous obtiendrez une fois que vous l'aurez exécuté.
[langage de code = "python"]
#!/usr/bin/python
# -*- codage : utf-8 -*-
importer urllib.request
importer urllib.parse
import urllib.error
depuis bs4 importer BeautifulSoup
importer SSL
importer json
importer ast
importer le système d'exploitation
à partir de urllib.request demande d'importation, urlopen
# Pour ignorer les erreurs de certificat SSL
ctx = ssl.create_default_context()
ctx.check_hostname=Faux
ctx.verify_mode = ssl.CERT_NONE
# Entrée de l'utilisateur
url = input('Entrez l'URL de la liste des maisons Zillow- ')
# Faire croire au site Web que vous y accédez à l'aide d'un navigateur mozilla
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
page Web = urlopen(req).read()
# Création d'un objet BeautifulSoup de la page html pour une extraction facile des données.
soupe = BeautifulSoup(page web, 'html.parser')
html = soup.prettify('utf-8')
propriété_json = {}
propriété_json['Details_Broad'] = {}
property_json['Adresse'] = {}
# Extraire le titre de l'annonce immobilière
pour le titre dans soup.findAll('title'):
property_json['Title'] = title.text.strip()
Pause
for meta in soup.findAll('meta', attrs={'name': 'description'}):
property_json['Detail_Short'] = meta['content'].strip()
for div in soup.findAll('div', attrs={'class': 'character-count-truncated'}):
property_json['Details_Broad']['Description'] = div.text.strip()
pour (i, script) dans enumerate(soup.findAll('script',
attrs={'type' : 'application/ld+json'})) :
si je == 0 :
json_data = json.loads(script.text)
property_json['Details_Broad']['Number of Rooms'] = json_data['numberOfRooms']
property_json['Details_Broad']['Taille du sol (en pieds carrés)'] = json_data['floorSize']['value']
property_json['Address']['Street'] = json_data['address']['streetAddress']
property_json['Address']['Localité'] = json_data['address']['addressLocalité']
property_json['Address']['Region'] = json_data['address']['addressRegion']
property_json['Address']['Postal Code'] = json_data['address']['postalCode']
si je == 1 :
json_data = json.loads(script.text)
property_json['Prix en $'] = json_data['offres']['prix']
propriété_json['Image'] = json_data['image']
Pause
avec open('data.json', 'w') comme fichier de sortie :
json.dump (propriété_json, fichier de sortie, retrait = 4)
avec open('output_file.html', 'wb') comme fichier :
fichier.write(html)
print ('———-L'extraction des données est terminée. Vérifier le fichier json.———-')
[/code]
Pour exécuter le code ci-dessus, vous devez l'enregistrer dans un fichier avec l'extension, tel que propertyScraper.py. Une fois cela fait, depuis le terminal, lancez la commande –
[langage de code = "python"]
propriété pythonScraper.py
[/code]
Lorsque vous l'exécuterez, vous serez invité à entrer l'URL d'une liste de propriétés. Il s'agit de la page Web qui sera réellement explorée pour les données par le programme. Nous avons utilisé deux liens et récupéré les données de deux propriétés. Voici les liens -
- https://www.zillow.com/homedetails/638-Grant-Ave-North-Baldwin-NY-11510/31220792_zpid/
- https://www.zillow.com/homedetails/10-Walnut-St-Arlington-MA-02476/56401372_zpid/
Les fichiers JSON obtenus lors de l'exécution du code sur le donné dans une sous-rubrique ultérieure.
Explication des codes
Avant d'expliquer comment le code s'exécute et ce qu'il renvoie, il est important de comprendre le code lui-même. Comme d'habitude, nous appuyons d'abord sur l'URL donnée et capturons l'intégralité du code HTML que nous convertissons en un bel objet soupe. Une fois cela fait, nous extrayons des divs, des scripts, des titres et d'autres balises spécifiques avec des attributs spécifiques. De cette façon, nous sommes en mesure d'identifier des informations spécifiques que nous souhaitons peut-être extraire d'une page.

Vous pouvez voir que nous avons également extrait un lien d'image pour chaque propriété. Cela a été fait délibérément puisque pour quelque chose comme l'immobilier, les images ont autant de valeur que d'autres informations. Bien que nous ayons effectivement extrait plusieurs champs des pages d'annonces immobilières, il est à noter que la page HTML contient beaucoup plus de points de données. Par conséquent, nous enregistrons également le contenu HTML localement afin que vous puissiez le parcourir et explorer plus d'informations.
Certaines des listes de maisons que nous avons grattées
Comme nous l'avons mentionné précédemment, nous avons en fait exploré quelques listes de propriétés pour vous montrer à quoi ressembleraient les données récupérées par Python au format JSON. De plus, nous avons mentionné la propriété pour laquelle un JSON particulier est, sous le JSON. Parlons maintenant des points de données que nous avons récupérés.
Nous avons obtenu une image de la propriété (bien que de nombreuses images pour chaque propriété soient disponibles sur une page d'annonce, nous en avons une pour chacune - c'est l'image du haut pour chaque annonce). Nous avons également obtenu le prix (en $) auquel il est inscrit, le titre de la propriété et une description de celle-ci qui vous aiderait à créer une image mentale de la propriété.
Parallèlement, nous avons gratté l'adresse, décomposée en quatre parties distinctes : la rue, la localité, la région et le code postal. Nous avons un autre champ de détails qui comporte plusieurs sous-champs, tels que le nombre de pièces, la taille de l'étage et une longue description. Dans certains cas, la description est manquante, comme nous l'avons découvert une fois que nous avons gratté plusieurs pages.
[langage de code = "python"]
{
"Details_Broad": {
"Nombre de chambres": 4,
"Taille du sol (en pieds carrés)": "1 728"
},
"Adresse": {
"Rue": "638 Grant Ave",
"Localité": "North baldwin",
"Région": "NY",
« Code postal » : « 11510 »
},
"Titre": "638 Grant Ave, North Baldwin, NY 11510 | MLS #3137924 | Zillow",
"Detail_Short": "638 Grant Ave, North baldwin, NY 11510-1332 est une maison unifamiliale mise en vente à 299 000 $. La maison de 1 728 pieds carrés est une propriété de 4 chambres et 2,0 salles de bain. Retrouvez 31 photos de la maison du 638 Grant Ave sur Zillow. Affichez plus de détails sur la propriété, l'historique des ventes et les données Zestimate sur Zillow. MLS # 3137924",
"Prix en $": 299000,
"Image": "https://photos.zillowstatic.com/p_h/ISzz1p7wk4ktye1000000000.jpg"
}
[/code]
[langage de code = "python"]
{
"Details_Broad": {
"Description": "Maison unifamiliale à trois lucarnes située dans le quartier Brattle d'Arlington entre Arlington Heights et Arlington Center. Construite dans les années 1920, cette maison offre de beaux détails d'époque, des planchers de bois franc, des plafonds avec poutres apparentes, un salon avec cheminée avec solarium privé, une salle à manger formelle, trois grandes chambres, un bureau et deux salles de bain complètes. Le potentiel d'amélioration de cette propriété pour agrandir l'espace de vie et personnaliser à votre goût personnel est exceptionnel. Près de la piste cyclable Minuteman Commuter, des lignes d'autobus Rt 77 et 79, des écoles, des magasins et des restaurants. Mise en scène virtuelle et photos de rénovation virtuelles fournies pour vous aider à visualiser.”,
"Nombre de chambres": 4,
"Taille du sol (en pieds carrés)": "2 224"
},
"Adresse": {
"Rue": "10 Walnut St",
"Localité": "Arlington",
"Région": "MA",
« Code postal » : « 02476 »
},
"Titre": "10 Walnut St, Arlington, MA 02476 | MLS #72515880 | Zillow",
"Detail_Short": "10 Walnut St, Arlington, MA 02476-6116 est une maison unifamiliale mise en vente à 725 000 $. La maison de 2 224 pieds carrés est une propriété de 4 chambres et 2,0 salles de bain. Retrouvez 34 photos de la maison du 10 Walnut St sur Zillow. Affichez plus de détails sur la propriété, l'historique des ventes et les données Zestimate sur Zillow. MLS # 72515880",
"Prix en $": 725000,
"Image": "https://photos.zillowstatic.com/p_h/ISifzwig3xt2re1000000000.jpg"
}
[/code]
[langage de code = "python"]
{
"Details_Broad": {
"Nombre de chambres": 4,
"Taille du sol (en pieds carrés)": "1 728"
},
"Adresse": {
"Rue": "638 Grant Ave",
"Localité": "North baldwin",
"Région": "NY",
« Code postal » : « 11510 »
},
"Titre": "638 Grant Ave, North Baldwin, NY 11510 | MLS #3137924 | Zillow",
"Detail_Short": "638 Grant Ave, North baldwin, NY 11510-1332 est une maison unifamiliale mise en vente à 299 000 $. La maison de 1 728 pieds carrés est une propriété de 4 chambres et 2,0 salles de bain. Retrouvez 31 photos de la maison du 638 Grant Ave sur Zillow. Affichez plus de détails sur la propriété, l'historique des ventes et les données Zestimate sur Zillow. MLS # 3137924",
"Prix en $": 299000,
"Image": "https://photos.zillowstatic.com/p_h/ISzz1p7wk4ktye1000000000.jpg"
}
[/code]
Gratter les données immobilières à grande échelle
En utilisant un code comme celui-ci, vous pouvez explorer les détails liés à quelques propriétés immobilières spécifiques uniquement. Vous pouvez vérifier manuellement les propriétés qui vous intéressent de temps en temps. Cependant, si vous cherchez à cibler une région spécifique aux États-Unis ou à l'étranger, vous aurez besoin d'un fournisseur de services de grattage Web expert ou d'outils de grattage de données pour vous aider à rassembler des listes de propriétés à partir d'un certain nombre de sites Web.
PromptCloud, en tant que principal fournisseur de grattage Web, estime que les solutions de grattage Web doivent être simples et ne doivent contenir que deux étapes : le client donne l'exigence et reçoit des données propres.
Notez également ici dans le blog que nous avons utilisé à la fois le robot et le grattoir. Ne soyez pas confus plus ou moins les deux sont les mêmes, mais si vous voulez en savoir plus, vous pouvez consulter notre blog sur l'exploration de données Web par rapport à l'extraction de données Web.
Avertissement : Le code présent dans notre tutoriel est uniquement à des fins d'apprentissage. Nous ne serons pas responsables de la manière dont il est utilisé, et il n'y aura aucune responsabilité de notre part pour tout effet négatif du code source. La simple présence de ce code sur notre site n'implique pas que nous favorisons le grattage ou l' exploration des sites Web mentionnés dans l'article. Le seul but de ce didacticiel est de présenter la technique d'écriture de grattoirs Web pour les principaux portails Web. Cependant, nous ne sommes pas obligés de fournir un support pour le code ; nous vous encourageons à ajouter vos questions et vos commentaires dans la section des commentaires afin que nous puissions vérifier et répondre à certains intervalles .
