Comment scraper Realtor.com | Guide complet de scraping 2026

Apprenez à extraire les annonces immobilières, les prix et les données d'agents de Realtor.com. Découvrez les techniques pour contourner Cloudflare et extraire...

Realtor.com favicon
realtor.comDifficile
Couverture:United States
Données Disponibles10 champs
TitrePrixLocalisationDescriptionImagesInfo VendeurInfo ContactDate de PublicationCatégoriesAttributs
Tous les Champs Extractibles
Titre de la propriétéPrix de l'annonceHistorique des prixType de propriétéAnnée de constructionChambresSalles de bainSuperficie totaleTaille du terrainAdresse complèteNom du quartierInfos sur le district scolaireURLs des images de la propriétéLiens vers les visites virtuellesJours sur le marchéNom de l'agent inscripteurNom de l'agenceHistorique des taxes foncièresFrais de copropriété (HOA)Paiement mensuel estimé
Exigences Techniques
JavaScript Requis
Sans Connexion
A une Pagination
Pas d'API Officielle
Protection Anti-Bot Détectée
CloudflareDataDomereCAPTCHARate LimitingIP BlockingBrowser Fingerprinting

Protection Anti-Bot Détectée

Cloudflare
WAF et gestion de bots de niveau entreprise. Utilise des défis JavaScript, des CAPTCHAs et l'analyse comportementale. Nécessite l'automatisation du navigateur avec des paramètres furtifs.
DataDome
Détection de bots en temps réel avec des modèles ML. Analyse l'empreinte d'appareil, les signaux réseau et les schémas comportementaux. Courant sur les sites e-commerce.
Google reCAPTCHA
Système CAPTCHA de Google. v2 nécessite une interaction utilisateur, v3 fonctionne silencieusement avec un score de risque. Peut être résolu avec des services CAPTCHA.
Limitation de débit
Limite les requêtes par IP/session dans le temps. Peut être contourné avec des proxys rotatifs, des délais de requête et du scraping distribué.
Blocage IP
Bloque les IP de centres de données connues et les adresses signalées. Nécessite des proxys résidentiels ou mobiles pour contourner efficacement.
Empreinte navigateur
Identifie les bots par les caractéristiques du navigateur : canvas, WebGL, polices, plugins. Nécessite du spoofing ou de vrais profils de navigateur.

À Propos de Realtor.com

Découvrez ce que Realtor.com offre et quelles données précieuses peuvent être extraites.

La puissance des données de Realtor.com

Realtor.com est une plateforme immobilière de premier plan exploitée par Move, Inc., offrant l'une des bases de données d'annonces immobilières les plus précises et à jour aux États-Unis. Grâce à ses relations directes avec plus de 800 services d'inscription multiples (MLS) locaux, elle offre une couverture de près de 99 % des annonces disponibles, souvent mises à jour toutes les 15 minutes. Cela en fait une véritable mine d'or pour les professionnels à la recherche des informations de marché les plus récentes.

Des informations immobilières complètes

La plateforme va au-delà des simples prix et du nombre de chambres. Elle inclut des données historiques approfondies, telles que les registres de taxes foncières, les indices de sécurité du quartier, les détails sur les districts scolaires et les estimations de paiements mensuels. Pour les investisseurs immobiliers et les analystes de marché, ce niveau de granularité des données est essentiel pour une évaluation précise des propriétés et la prévision des tendances.

Pourquoi les entreprises scrapent Realtor.com

Le scraping de ce site permet aux entreprises d'automatiser la collecte de milliers d'annonces qu'il serait impossible de rassembler manuellement. Qu'il s'agisse de créer un calculateur d'hypothèque compétitif, d'identifier des opportunités d'achat-rénovation (fix-and-flip) ou de surveiller les performances des agences, les données structurées extraites de Realtor.com servent d'atout fondamental pour une intelligence immobilière de haut niveau.

À Propos de Realtor.com

Pourquoi Scraper Realtor.com?

Découvrez la valeur commerciale et les cas d'utilisation pour l'extraction de données de Realtor.com.

Veille de marché en temps réel

Suivez les fluctuations des prix de l'immobilier et de l'inventaire dans des codes postaux spécifiques pour identifier les tendances émergentes avant que le marché général ne réagisse.

Génération de leads automatisée

Extrayez les coordonnées des agents et des agences immobilières pour constituer une base de données robuste destinée aux courtiers hypothécaires, aux assureurs et aux entreprises de services à domicile.

Modélisation de l'évaluation des investissements

Rassemblez des données complètes sur les chambres, les salles de bain, la surface habitable et la taille des terrains pour alimenter des modèles de machine learning qui prédisent l'appréciation des biens et le ROI.

Analyse concurrentielle de l'inventaire

Surveillez les annonces actives des agences concurrentes pour évaluer vos performances et comprendre la répartition des parts de marché régionales.

Suivi de l'historique des prix

Collectez l'historique des prix et les données sur le temps de présence sur le marché pour aider les acheteurs et les investisseurs à négocier de meilleures offres basées sur les performances historiques du bien.

Intégration de données PropTech

Injectez des données immobilières de haute qualité, synchronisées avec le MLS, directement dans des applications personnalisées, des tableaux de bord ou des systèmes CRM pour une gestion immobilière fluide.

Défis du Scraping

Défis techniques que vous pouvez rencontrer lors du scraping de Realtor.com.

Protection anti-bot sophistiquée

Realtor.com utilise DataDome et Akamai pour identifier et bloquer le trafic automatisé, nécessitant souvent des techniques avancées de browser fingerprinting et de gestion de proxy pour être contournés.

Chargement de contenu dynamique

Le site s'appuie fortement sur React et JavaScript pour le rendu des données d'annonces, ce qui signifie que les simples parseurs HTML ne parviendront pas à capturer les détails immobiliers les plus importants.

Limitation de débit agressive

L'envoi de trop de requêtes à partir d'une seule adresse IP sur une courte période déclenche un blocage persistant et une page d'erreur 'Reference ID'.

Volatilité structurelle des sélecteurs

Le site met fréquemment à jour ses noms de classes CSS et sa structure HTML interne, ce qui peut casser les scrapers reposant sur des sélecteurs statiques codés en dur.

Scrapez Realtor.com avec l'IA

Aucun code requis. Extrayez des données en minutes avec l'automatisation par IA.

Comment ça marche

1

Décrivez ce dont vous avez besoin

Dites à l'IA quelles données vous souhaitez extraire de Realtor.com. Tapez simplement en langage naturel — pas de code ni de sélecteurs.

2

L'IA extrait les données

Notre intelligence artificielle navigue sur Realtor.com, gère le contenu dynamique et extrait exactement ce que vous avez demandé.

3

Obtenez vos données

Recevez des données propres et structurées, prêtes à exporter en CSV, JSON ou à envoyer directement à vos applications.

Pourquoi utiliser l'IA pour le scraping

Contournement fluide des anti-bots: Automatio gère automatiquement la complexité du contournement de DataDome et Cloudflare, vous permettant de vous concentrer sur l'extraction de données plutôt que sur les solutions techniques de rechange.
Interface de sélection visuelle: Mappez facilement les titres de propriété, les prix et les descriptions à l'aide d'une interface pointer-cliquer qui gère les éléments dynamiques basés sur React sans écrire de code.
Rotation mondiale des proxies: Accédez à un vaste réseau de proxies résidentiels et mobiles qui masquent votre activité de scraping en comportement utilisateur légitime pour éviter le bannissement d'IP.
Actualisation programmée des données: Configurez votre scraper pour qu'il s'exécute quotidiennement ou à chaque heure afin de garantir que votre base de données contient toujours les dernières annonces et les baisses de prix les plus récentes.
Pas de carte de crédit requiseOffre gratuite disponibleAucune configuration nécessaire

L'IA facilite le scraping de Realtor.com sans écrire de code. Notre plateforme alimentée par l'intelligence artificielle comprend quelles données vous voulez — décrivez-les en langage naturel et l'IA les extrait automatiquement.

How to scrape with AI:
  1. Décrivez ce dont vous avez besoin: Dites à l'IA quelles données vous souhaitez extraire de Realtor.com. Tapez simplement en langage naturel — pas de code ni de sélecteurs.
  2. L'IA extrait les données: Notre intelligence artificielle navigue sur Realtor.com, gère le contenu dynamique et extrait exactement ce que vous avez demandé.
  3. Obtenez vos données: Recevez des données propres et structurées, prêtes à exporter en CSV, JSON ou à envoyer directement à vos applications.
Why use AI for scraping:
  • Contournement fluide des anti-bots: Automatio gère automatiquement la complexité du contournement de DataDome et Cloudflare, vous permettant de vous concentrer sur l'extraction de données plutôt que sur les solutions techniques de rechange.
  • Interface de sélection visuelle: Mappez facilement les titres de propriété, les prix et les descriptions à l'aide d'une interface pointer-cliquer qui gère les éléments dynamiques basés sur React sans écrire de code.
  • Rotation mondiale des proxies: Accédez à un vaste réseau de proxies résidentiels et mobiles qui masquent votre activité de scraping en comportement utilisateur légitime pour éviter le bannissement d'IP.
  • Actualisation programmée des données: Configurez votre scraper pour qu'il s'exécute quotidiennement ou à chaque heure afin de garantir que votre base de données contient toujours les dernières annonces et les baisses de prix les plus récentes.

Scrapers Web No-Code pour Realtor.com

Alternatives pointer-cliquer au scraping alimenté par l'IA

Plusieurs outils no-code comme Browse.ai, Octoparse, Axiom et ParseHub peuvent vous aider à scraper Realtor.com sans écrire de code. Ces outils utilisent généralement des interfaces visuelles pour sélectionner les données, bien qu'ils puissent avoir des difficultés avec le contenu dynamique complexe ou les mesures anti-bot.

Workflow Typique avec les Outils No-Code

1
Installer l'extension de navigateur ou s'inscrire sur la plateforme
2
Naviguer vers le site web cible et ouvrir l'outil
3
Sélectionner en point-and-click les éléments de données à extraire
4
Configurer les sélecteurs CSS pour chaque champ de données
5
Configurer les règles de pagination pour scraper plusieurs pages
6
Gérer les CAPTCHAs (nécessite souvent une résolution manuelle)
7
Configurer la planification pour les exécutions automatiques
8
Exporter les données en CSV, JSON ou se connecter via API

Défis Courants

Courbe d'apprentissage

Comprendre les sélecteurs et la logique d'extraction prend du temps

Les sélecteurs cassent

Les modifications du site web peuvent casser tout le workflow

Problèmes de contenu dynamique

Les sites riches en JavaScript nécessitent des solutions complexes

Limitations des CAPTCHAs

La plupart des outils nécessitent une intervention manuelle pour les CAPTCHAs

Blocage d'IP

Le scraping agressif peut entraîner le blocage de votre IP

Scrapers Web No-Code pour Realtor.com

Plusieurs outils no-code comme Browse.ai, Octoparse, Axiom et ParseHub peuvent vous aider à scraper Realtor.com sans écrire de code. Ces outils utilisent généralement des interfaces visuelles pour sélectionner les données, bien qu'ils puissent avoir des difficultés avec le contenu dynamique complexe ou les mesures anti-bot.

Workflow Typique avec les Outils No-Code
  1. Installer l'extension de navigateur ou s'inscrire sur la plateforme
  2. Naviguer vers le site web cible et ouvrir l'outil
  3. Sélectionner en point-and-click les éléments de données à extraire
  4. Configurer les sélecteurs CSS pour chaque champ de données
  5. Configurer les règles de pagination pour scraper plusieurs pages
  6. Gérer les CAPTCHAs (nécessite souvent une résolution manuelle)
  7. Configurer la planification pour les exécutions automatiques
  8. Exporter les données en CSV, JSON ou se connecter via API
Défis Courants
  • Courbe d'apprentissage: Comprendre les sélecteurs et la logique d'extraction prend du temps
  • Les sélecteurs cassent: Les modifications du site web peuvent casser tout le workflow
  • Problèmes de contenu dynamique: Les sites riches en JavaScript nécessitent des solutions complexes
  • Limitations des CAPTCHAs: La plupart des outils nécessitent une intervention manuelle pour les CAPTCHAs
  • Blocage d'IP: Le scraping agressif peut entraîner le blocage de votre IP

Exemples de Code

import requests
from bs4 import BeautifulSoup

# Note : Realtor.com utilise un Cloudflare agressif. Les requêtes simples échouent souvent.
url = "https://www.realtor.com/realestateandhomes-search/New-York_NY"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9"
}

try:
    response = requests.get(url, headers=headers, timeout=15)
    # Vérifier si nous avons passé l'anti-bot
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, 'html.parser')
        # Cibler les cartes de propriété basées sur les attributs de données communs
        prices = soup.select('span[data-label="pc-price"]')
        for price in prices:
            print(f"Prix de la propriété : {price.text}")
    else:
        print(f"Bloqué ou Erreur : Code d'état {response.status_code}")
except Exception as e:
    print(f"Échec de la connexion : {e}")

Quand Utiliser

Idéal pour les pages HTML statiques avec peu de JavaScript. Parfait pour les blogs, sites d'actualités et pages e-commerce simples.

Avantages

  • Exécution la plus rapide (sans surcharge navigateur)
  • Consommation de ressources minimale
  • Facile à paralléliser avec asyncio
  • Excellent pour les APIs et pages statiques

Limitations

  • Ne peut pas exécuter JavaScript
  • Échoue sur les SPAs et contenu dynamique
  • Peut avoir des difficultés avec les systèmes anti-bot complexes

Comment Scraper Realtor.com avec du Code

Python + Requests
import requests
from bs4 import BeautifulSoup

# Note : Realtor.com utilise un Cloudflare agressif. Les requêtes simples échouent souvent.
url = "https://www.realtor.com/realestateandhomes-search/New-York_NY"
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9"
}

try:
    response = requests.get(url, headers=headers, timeout=15)
    # Vérifier si nous avons passé l'anti-bot
    if response.status_code == 200:
        soup = BeautifulSoup(response.text, 'html.parser')
        # Cibler les cartes de propriété basées sur les attributs de données communs
        prices = soup.select('span[data-label="pc-price"]')
        for price in prices:
            print(f"Prix de la propriété : {price.text}")
    else:
        print(f"Bloqué ou Erreur : Code d'état {response.status_code}")
except Exception as e:
    print(f"Échec de la connexion : {e}")
Python + Playwright
from playwright.sync_api import sync_playwright

def scrape_realtor():
    with sync_playwright() as p:
        # Lancement avec des paramètres de furtivité (stealth)
        browser = p.chromium.launch(headless=True)
        context = browser.new_context(user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...")
        page = context.new_page()
        
        print("Navigation vers Realtor.com...")
        page.goto("https://www.realtor.com/realestateandhomes-search/Austin_TX", wait_until="networkidle")
        
        # Attendre que les sélecteurs de cartes de propriété se chargent via JS
        page.wait_for_selector('div[data-testid="property-card"]')
        
        listings = page.query_selector_all('div[data-testid="property-card"]')
        for item in listings:
            price = item.query_selector('[data-label="pc-price"]').inner_text()
            address = item.query_selector('[data-label="pc-address"]').inner_text()
            print(f"Annonce : {address} - Prix : {price}")
            
        browser.close()

scrape_realtor()
Python + Scrapy
import scrapy

class RealtorSpider(scrapy.Spider):
    name = 'realtor_spider'
    start_urls = ['https://www.realtor.com/realestateandhomes-search/Miami_FL']

    def parse(self, response):
        # Extraction des données à l'aide de sélecteurs CSS
        for property in response.css('div[data-testid="property-card"]'):
            yield {
                'price': property.css('span[data-label="pc-price"]::text').get(),
                'address': property.css('div[data-label="pc-address"]::text').get(),
                'beds': property.css('li[data-label="pc-meta-beds"] span::text').get()
            }

        # Gestion simple de la pagination
        next_page = response.css('a[aria-label="Go to next page"]::attr(href)').get()
        if next_page:
            yield response.follow(next_page, self.parse)
Node.js + Puppeteer
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({ headless: true });
  const page = await browser.newPage();
  
  // Définir des en-têtes de haut niveau pour imiter un utilisateur réel
  await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36');
  
  console.log('Visite de Realtor.com...');
  await page.goto('https://www.realtor.com/realestateandhomes-search/Chicago_IL', { waitUntil: 'domcontentloaded' });
  
  // Attendre que les éléments de prix soient visibles
  await page.waitForSelector('.pc-price');
  
  const results = await page.evaluate(() => {
    const prices = Array.from(document.querySelectorAll('.pc-price'));
    return prices.map(p => p.innerText);
  });
  
  console.log('Prix extraits :', results);
  await browser.close();
})();

Que Pouvez-Vous Faire Avec Les Données de Realtor.com

Explorez les applications pratiques et les insights des données de Realtor.com.

Identification d'investissements immobiliers

Les investisseurs utilisent les données scrapées pour trouver des propriétés listées en dessous du prix médian au pied carré du quartier.

Comment implémenter :

  1. 1Scraper toutes les annonces actives dans un comté ou une ville spécifique
  2. 2Calculer le prix moyen au pied carré pour différents types de propriétés
  3. 3Signaler les annonces dont le prix est 20 % inférieur à la moyenne pour une inspection manuelle
  4. 4Exporter les résultats vers un CRM pour une prospection immédiate par les agents

Utilisez Automatio pour extraire des données de Realtor.com et créer ces applications sans écrire de code.

Que Pouvez-Vous Faire Avec Les Données de Realtor.com

  • Identification d'investissements immobiliers

    Les investisseurs utilisent les données scrapées pour trouver des propriétés listées en dessous du prix médian au pied carré du quartier.

    1. Scraper toutes les annonces actives dans un comté ou une ville spécifique
    2. Calculer le prix moyen au pied carré pour différents types de propriétés
    3. Signaler les annonces dont le prix est 20 % inférieur à la moyenne pour une inspection manuelle
    4. Exporter les résultats vers un CRM pour une prospection immédiate par les agents
  • Génération de prospects en prêts hypothécaires

    Les prêteurs identifient les nouvelles annonces pour proposer des options de financement aux acheteurs potentiels ou aux agents inscripteurs.

    1. Surveiller Realtor.com pour les maisons « Tout juste listées » dans des codes postaux cibles
    2. Extraire le prix de vente et le paiement mensuel estimé
    3. Faire correspondre les annonces avec les coordonnées des agents pour des propositions de partenariat
    4. Automatiser un rapport quotidien des nouvelles propriétés à haute valeur pour les équipes de vente
  • Analyse comparative de marché (ACM)

    Les agents immobiliers génèrent des rapports comparant leurs annonces à des propriétés actives similaires dans le secteur.

    1. Scraper les détails des propriétés (chambres, salles de bain, superficie) dans un rayon de 1,6 km
    2. Extraire le nombre de jours sur le marché pour analyser la rapidité de vente des maisons similaires
    3. Comparer les prix affichés aux prix de vente historiques dans le même quartier
    4. Visualiser les données dans un tableau de bord pour aider les clients à fixer le prix de vente parfait
  • Prévision du rendement locatif

    Analyser la relation entre les prix d'achat et les tarifs de location pour calculer le ROI potentiel.

    1. Scraper à la fois les annonces « À vendre » et « À louer » sur les mêmes codes postaux
    2. Mettre en relation les prix de vente avec les revenus locatifs mensuels moyens pour des tailles de propriété spécifiques
    3. Calculer le rendement locatif brut pour divers quartiers
    4. Identifier les marchés émergents où la demande locative dépasse la croissance des prix de l'immobilier
Plus que de simples prompts

Optimisez votre flux de travail avec l'Automatisation IA

Automatio combine la puissance des agents IA, de l'automatisation web et des integrations intelligentes pour vous aider a accomplir plus en moins de temps.

Agents IA
Automatisation Web
Flux Intelligents

Conseils Pro pour Scraper Realtor.com

Conseils d'experts pour extraire avec succès les données de Realtor.com.

Prioriser les proxies résidentiels

Utilisez toujours des proxies résidentiels ou mobiles pour cibler Realtor.com ; les IPs de data center sont presque systématiquement signalées et bloquées par leurs pare-feu de sécurité.

Exploiter le JSON-LD masqué

Recherchez les données schema.org dans le code source HTML, car elles contiennent souvent des données immobilières structurées et propres, bien plus faciles à parser que l'interface visuelle.

Imiter la navigation humaine

Intégrez un défilement aléatoire, des mouvements de souris et des temps d'attente variés entre les chargements de pages pour éviter de déclencher les systèmes de détection heuristique de bots.

Rotation des browser fingerprints

Modifiez votre User-Agent, la résolution d'écran et les paramètres de hardware concurrency entre les sessions pour éviter d'être identifié de manière unique comme un scraper.

Gérer la pagination avec soin

Naviguez à travers les pages en utilisant les boutons de pagination réels ou en ajustant progressivement les parameters de l'URL, en veillant à ne pas sauter de pages trop rapidement.

Surveiller les changements de sélecteurs

Configurez des alertes pour vous informer si votre scraper retourne des valeurs nulles, ce qui indique généralement que Realtor.com a mis à jour son code front-end.

Témoignages

Ce Que Disent Nos Utilisateurs

Rejoignez des milliers d'utilisateurs satisfaits qui ont transforme leur flux de travail

Jonathan Kogan

Jonathan Kogan

Co-Founder/CEO, rpatools.io

Automatio is one of the most used for RPA Tools both internally and externally. It saves us countless hours of work and we realized this could do the same for other startups and so we choose Automatio for most of our automation needs.

Mohammed Ibrahim

Mohammed Ibrahim

CEO, qannas.pro

I have used many tools over the past 5 years, Automatio is the Jack of All trades.. !! it could be your scraping bot in the morning and then it becomes your VA by the noon and in the evening it does your automations.. its amazing!

Ben Bressington

Ben Bressington

CTO, AiChatSolutions

Automatio is fantastic and simple to use to extract data from any website. This allowed me to replace a developer and do tasks myself as they only take a few minutes to setup and forget about it. Automatio is a game changer!

Sarah Chen

Sarah Chen

Head of Growth, ScaleUp Labs

We've tried dozens of automation tools, but Automatio stands out for its flexibility and ease of use. Our team productivity increased by 40% within the first month of adoption.

David Park

David Park

Founder, DataDriven.io

The AI-powered features in Automatio are incredible. It understands context and adapts to changes in websites automatically. No more broken scrapers!

Emily Rodriguez

Emily Rodriguez

Marketing Director, GrowthMetrics

Automatio transformed our lead generation process. What used to take our team days now happens automatically in minutes. The ROI is incredible.

Jonathan Kogan

Jonathan Kogan

Co-Founder/CEO, rpatools.io

Automatio is one of the most used for RPA Tools both internally and externally. It saves us countless hours of work and we realized this could do the same for other startups and so we choose Automatio for most of our automation needs.

Mohammed Ibrahim

Mohammed Ibrahim

CEO, qannas.pro

I have used many tools over the past 5 years, Automatio is the Jack of All trades.. !! it could be your scraping bot in the morning and then it becomes your VA by the noon and in the evening it does your automations.. its amazing!

Ben Bressington

Ben Bressington

CTO, AiChatSolutions

Automatio is fantastic and simple to use to extract data from any website. This allowed me to replace a developer and do tasks myself as they only take a few minutes to setup and forget about it. Automatio is a game changer!

Sarah Chen

Sarah Chen

Head of Growth, ScaleUp Labs

We've tried dozens of automation tools, but Automatio stands out for its flexibility and ease of use. Our team productivity increased by 40% within the first month of adoption.

David Park

David Park

Founder, DataDriven.io

The AI-powered features in Automatio are incredible. It understands context and adapts to changes in websites automatically. No more broken scrapers!

Emily Rodriguez

Emily Rodriguez

Marketing Director, GrowthMetrics

Automatio transformed our lead generation process. What used to take our team days now happens automatically in minutes. The ROI is incredible.

Associés Web Scraping

Questions Fréquentes sur Realtor.com

Trouvez des réponses aux questions courantes sur Realtor.com