Passer au contenu

Comment extraire des données d'Apartments.com

Apartments.com est l'un des plus grands sites d'annonces d'appartements aux États-Unis, avec plus de 4 millions d'annonces de location actives à travers le pays. Pour les investisseurs immobiliers, les gestionnaires immobiliers et les analystes de données, l'extraction de données d'Apartments.com peut apporter une valeur considérable pour comprendre les tendances du marché locatif, trouver des offres et mener une analyse concurrentielle.

Cependant, Apartments.com ne dispose pas d'API publique pour accéder aux données d'annonce à grande échelle. Bien qu'ils disposent d'une API pour les annonces directes par les gestionnaires immobiliers, celle-ci est limitée au propre inventaire d'une entreprise. Pour ceux qui cherchent à extraire de vastes données de marché à partir du site, le web scraping est actuellement la meilleure approche.

Dans ce guide complet, j'aborderai différentes méthodes et outils pour extraire des données d'Apartments.com, notamment :

  • Supprimer les pages de recherche d'annonces
  • Suppression des pages de détails d'annonces individuelles
  • Capturer les informations de contact
  • Scraper les pages de la communauté
  • Extraire les tendances de prix
  • Éviter la détection des robots

Je partagerai des exemples de code utilisant Python et Node.js, ainsi que des services tiers recommandés qui peuvent simplifier le processus de scraping. Mon objectif est de fournir un didacticiel détaillé pour créer un grattoir Web personnalisé ou utiliser des API pour extraire des données de grande valeur d'Apartments.com.

Supprimer les pages de recherche d'annonces

Le principal point d’entrée pour récupérer les données d’Apartments.com consiste à répertorier les pages de recherche pour un emplacement donné. En extrayant les champs clés de ces pages, vous pouvez constituer une base de données des locations disponibles avec des attributs de base tels que l'adresse, les chambres/salles de bains, le prix du loyer, etc.

Voici quelques bonnes pratiques pour supprimer les pages de recherche :

Utilisez des codes postaux ou des quartiers pour la recherche de localisation – Démarrez votre scraper en recherchant une zone définie plutôt que de filtrer par chambres, prix, etc. Cela renverra un ensemble de listes plus complet.

Parcourez tous les résultats – Les annonces sont paginées avec environ 25 résultats par page. Votre scraper doit cliquer automatiquement pour extraire toutes les pages de résultats.

Cibler les attributs des données clés – Les champs principaux à extraire incluent le titre, l’adresse, les chambres, les salles de bains, la taille, le prix, les équipements, les contacts, les liens vers les pages de détails, etc.

Attention à la détection des robots – Apartments.com bloque les robots de grattage, utilisez donc des proxys, des retards aléatoires et d'autres tactiques d'évasion. Nous en reparlerons plus tard.

Exemple de code Python pour le scraping de pages de recherche :

import requests
from bs4 import BeautifulSoup

# Search for Hollywood, FL rentals
url = "https://www.apartments.com/hollywood-fl/"

# Page through all results   
for page in range(1, 10):

  # Construct page URL
  url_with_page = f"{url}?page={page}"

  # Fetch page HTML
  response = requests.get(url_with_page)

  # Parse HTML with BeautifulSoup  
  soup = BeautifulSoup(response.content, "html.parser")

  # Extract data from result cards
  cards = soup.find_all("div", class_="property-card")

  for card in cards:
    address = card.find("div", class_="property-address").text.strip()
    title = card.find("div", class_="property-title").text.strip() 

    bedrooms = card.find("div", class_="bed-range").text.strip()
    bathrooms = card.find("div", class_="bath-range").text.strip()

    size = card.find("div", class_="sqft").text.strip()
    price = card.find("div", class_="property-pricing").text.strip()

    amenities = [item.text for item in card.find_all("span", class_="amenity-text")]

    # Print extracted data
    print(f"Address: {address}")
    print(f"Title: {title}")
    print(f"Bedrooms: {bedrooms}") 
    print(f"Bathrooms: {bathrooms}")
    # And so on...

    # Follow link to detail page for more data
    detail_url = card.find("a")["href"]

Cela couvre les bases du scraping des pages de recherche : parcourir chaque page de résultats, analyser le HTML avec BeautifulSoup et extraire les attributs clés de chaque fiche de liste. La même approche fonctionne pour n’importe quelle recherche de localisation sur le site.

Le grattage de pages de détails individuelles (abordées ci-après) peut fournir des données beaucoup plus granulaires pour chaque annonce.

Suppression des pages de détails d'annonces individuelles

Alors que les pages de recherche d'annonces fournissent un résumé des attributs principaux, l'exploration de la page de détail individuelle de chaque propriété peut découvrir plus de 100 champs supplémentaires. Cela comprend les équipements détaillés, les conditions/restrictions de location, les informations sur le district scolaire, les locations comparables, et bien plus encore.

Cependant, la récupération et l’analyse de milliers de pages de détails nécessitent une logique plus sophistiquée pour éviter la détection de robots. Voici quelques conseils:

  • Ajouter des délais aléatoires entre les demandes de pages
  • Limiter les demandes à quelques pages par minute
  • Rotation des agents utilisateurs et des proxys varier les empreintes digitales
  • Maintenir les séances requêtes sur plusieurs pages
  • Réessayer les demandes ayant échoué à travers les combinaisons proxy/agent utilisateur

C’est dans cette complexité supplémentaire que l’utilisation d’une API commerciale de web scraping peut être d’une grande utilité. Des services tels que BrightData, ScrapingBee ou ScraperAPI gèrent automatiquement la rotation du proxy, la randomisation des empreintes digitales du navigateur et la logique de nouvelle tentative.

Par exemple, voici un exemple de code Python pour extraire une page de détails à l'aide de l'API BrightData :

import brightdata
from brightdata.utils import *

brightdata = BrightData(‘YOUR_API_KEY‘)

detail_url = "https://www.apartments.com/the-wilton-hollywood-fl/eqr0wdq/" 

scraper = brightdata.Scraper(
    task_name=‘apartments.com‘,
    proxy_groups=‘residential‘
)

page = scraper.get(url=detail_url)
soup = BeautifulSoup(page.content, ‘html.parser‘)

title = soup.find("h1", class_="property-title").text.strip()
address = soup.find("div", class_="property-address").text.strip()

description = soup.find("div", class_="content-block description").text.strip() 

# And so on...

brightdata.close()

En gérant les proxys et les sessions de navigateur sous le capot, des API comme celle-ci facilitent la suppression de nombreuses pages de détails d'annonces sans être bloquées.

Capturer les informations de contact

L'une des données les plus précieuses sur Apartments.com est le numéro de téléphone et les coordonnées de chaque annonce. Cependant, ces informations ne sont affichées qu'en HTML brut pour les utilisateurs connectés.

Pour accéder aux informations de contact à grande échelle, vous devez :

  1. Créer des comptes par programmation – Comptes uniques pour chaque instance de scraper

  2. Connectez-vous avant de gratter – Maintenir les sessions connectées lors des demandes de pages

  3. Analyser les champs de contact – Extraire les informations dans les attributs verrouillés

Encore une fois, des services comme BrightData offrent une prise en charge intégrée pour la création et la connexion de comptes par programmation. L'API gère les cookies, les sessions, les captchas, etc. en coulisse afin que vous puissiez vous concentrer sur l'extraction des données.

Voici un exemple utilisant l'API Puppeteer dans Node.js :

const { PuppeteerHandler } = require(‘brightdata‘);

const handler = new PuppeteerHandler({
  launchOptions: {
    headless: true,
  },
});

const page = await handler.newPage();

// Create and log into account
await page.goto(‘https://www.apartments.com/‘);
await page.click(‘[data-modal-trigger="register"]‘); 
// ...register form submit logic

// Now logged in, scrape contact info 
await page.goto(‘https://www.apartments.com/the-wilton-hollywood-fl/eqr0wdq/‘);

const title = await page.$eval(‘h1‘, el => el.innerText); 
const phone = await page.$eval(‘.phone-number‘, el => el.innerText);

console.log({ title, phone });

await handler.close();

Avoir le numéro de téléphone et d’autres coordonnées peut permettre de contacter directement les gestionnaires immobiliers.

Scraper les pages de la communauté

Au-delà des annonces individuelles, Apartments.com propose des pages « communautaires » détaillées pour chaque propriété à locataires multiples. Ceux-ci contiennent des informations supplémentaires telles que :

  • Nom du gestionnaire immobilier
  • Nombre d'unités totales
  • Année de construction
  • Modes de paiement acceptés
  • District scolaire
  • Avis des résidents
  • Ciblage démographique
  • Disponibilité historique %

Ces données fournissent un contexte de marché utile autour de chaque communauté locative. Pour l'extraire, vous devez :

  1. Capturez l'URL de la communauté à partir de chaque page de liste
  2. Parcourez les URL de la communauté pour récupérer chaque page
  3. Utilisez une configuration de grattoir robuste pour éviter les blocages
  4. Analysez les sections de la page telles que « Faits et fonctionnalités », « Expérience du résident », etc.

Par exemple :

# After scraping all listing detail pages

community_urls = [] 

for listing in all_listings:
  community_url = listing[‘community_url‘]
  community_urls.append(community_url)

community_urls = list(set(community_urls)) # dedup 

for url in community_urls:

  page = brightdata_scraper.get(url) # proxy rotation, retries, etc

  soup = BeautifulSoup(page.content, ‘html.parser‘)

  facts = soup.find("div", {"data-name": "Facts and Features"})

  property_manager = facts.find("div", class_="manager")
  total_units = facts.find("div", class_="totalUnits") 

  # And so on...

La compilation de données communautaires parallèlement à votre inventaire d'annonces fournit une analyse de marché plus riche.

L’un des principaux avantages d’un grattoir Apartments.com est de découvrir les tendances des taux de location au fil du temps. En extrayant à plusieurs reprises les données de référencement sur une base quotidienne ou hebdomadaire, vous pouvez constituer un historique de prix dynamique pour chaque unité.

Cela implique:

  • Stockage d'instantanés de référencement des données au fil du temps
  • Déduplication basé sur l'adresse
  • Analyser les changements de prix pour chaque identifiant d'annonce

Par exemple, vous pouvez produire des rapports quotidiens sur les prix moyens par marché :

Date         | Atlanta Avg | Dallas Avg | Phoenix Avg
-----------------------------------------------------
2022-01-01   | $1800       | $2200      | $2100
2022-01-02   | $1850       | $2300      | $2000  
2022-01-03   | $1875       | $2400      | $1975

Lorsqu’elles sont limitées à une ville ou à un quartier spécifique, les tendances des prix peuvent signaler des opportunités pour des propriétés inférieures au prix du marché. Ils aident également à orienter les négociations de renouvellement de bail.

Éviter la détection des robots

Le plus grand défi lors du scraping d’Apartments.com à grande échelle est d’éviter la détection de robots. Le site essaie activement de bloquer les robots scraping via :

  • Listes noires IP
  • Empreinte du navigateur
  • Analyse du comportement humain
  • Défis CAPTCHA

Voici quelques bonnes pratiques pour maximiser la disponibilité du scraping :

  • Utiliser des proxys résidentiels dédiés – Évitez les adresses IP partagées signalées pour le scraping
  • Limiter les demandes à quelques pages par minute
  • Randomiser les agents utilisateurs à chaque demande
  • Rendu réel du navigateur – Des API ou des navigateurs sans tête peuvent être détectés
  • Injecter des retards semblables à ceux des humains entre les actions
  • Faites pivoter fréquemment les proxys et les navigateurs – Varier les empreintes digitales

Les services proxy de premier plan tels que BrightData, SmartProxy et GeoSurf (pour les adresses IP résidentielles) sont spécialement conçus pour les sites difficiles comme Apartments.com. Ils facilitent l'évasion grâce à la mise à l'échelle automatique, aux navigateurs à réparation automatique et aux véritables adresses IP mobiles.

Avec les bons outils et précautions, il est possible d’extraire avec succès de gros volumes de données d’Apartments.com. La combinaison des attributs de la page de détail, des informations de contact, des données de la communauté et des tendances de prix peut constituer une puissante information sur le marché de la location.

Conclusion

Dans ce guide, j'ai abordé diverses techniques pour extraire des données d'Apartments.com à grande échelle, notamment :

  • Suppression des listes de recherche et des pages de détails
  • Capturer les informations de contact
  • Compilation des données de la page de la communauté
  • Analyser les tendances des prix au fil du temps
  • Éviter la détection des robots avec les proxys et les navigateurs sans tête

L’absence d’API publique rend Apartments.com difficile à exploiter. Mais avec des outils et des stratégies robustes, il est possible de créer des ensembles de données puissants qui reflètent le marché locatif au sens large.

À tous ceux qui cherchent à exploiter les données d’Apartments.com, je recommande d’envisager un service commercial de grattage Web ou de proxy. Ils gèrent le gros du travail de gestion des proxys, des navigateurs et des tactiques d’évasion par programmation. Cela vous permet de vous concentrer sur l’extraction et la structuration des données.

Avec quelques compétences techniques et les bonnes ressources, vous pouvez exploiter les données d'Apartments.com pour obtenir des informations précieuses sur l'investissement immobilier, la gestion immobilière, l'analyse financière, etc. Faites-moi savoir si vous avez d'autres questions !

Prendre part à la conversation

Votre adresse email n'apparaitra pas. Les champs obligatoires sont marqués *