Real estate data scraping - collect property listings with Python and proxies - DataImpulse
  • Published:
  • Last Updated:
  • General
  • 9 min read

رئیل اسٹیٹ ڈیٹا اسکریپنگ وہ عمل ہے جس کے ذریعے پراپرٹی پلیٹ فارمز، سرمایہ کار اور پراپ ٹیک ٹیمیں بکھری ہوئی آن لائن لسٹنگز کو ایک منظم ڈیٹا سیٹ میں بدلتی ہیں: قیمتیں، پتے، بیڈرومز، باتھ رومز، مربع فٹ رقبہ اور پوری مارکیٹ کے رجحانات۔ یہ گائیڈ دکھاتی ہے کہ پائتھن کے ذریعے پراپرٹی لسٹنگز کو قابل اعتماد انداز میں کیسے اسکریپ کیا جائے، یعنی اس ساختی ڈیٹا کو پارس کر کے جو سائٹس پہلے ہی شامل کرتی ہیں، ساتھ ہی اینٹی بوٹ اور پروکسی سیٹ اپ بھی بتایا گیا ہے جو مختلف خطوں میں ڈیٹا جمع کرنے کا عمل جاری رکھتا ہے۔

میں اندری بزوف ہوں، ایک اے آئی نیٹو فریکشنل سی ایم او جو ویب ڈیٹا پائپ لائنز بناتا ہے۔ ذیل میں آپ دیکھیں گے کہ کون سا رئیل اسٹیٹ ڈیٹا اکٹھا کیا جا سکتا ہے، قانونی حد کہاں بنتی ہے، اور سرچ نتائج اور انفرادی لسٹنگز کے لیے کام کرنے والا کوڈ کیسے استعمال ہوتا ہے، جغرافیائی طور پر درست اور بلاک نہ ہونے والے ڈیٹا کے لیے رہائشی پروکسیز کے ساتھ۔


اہم حقائق

  • زیادہ تر لسٹنگ حقائق عوامی اور کم خطرے والے ہوتے ہیں: قیمت، بیڈرومز/باتھ رومز، مربع فٹ رقبہ اور قسم۔ لیکن پتے، تصاویر، تفصیلات اور ایجنٹ کے نام ذاتی یا کاپی رائٹ شدہ ہو سکتے ہیں، اس لیے دوبارہ استعمال سے پہلے جائزہ لیں۔
  • جہاں موجود ہو وہاں ایمبیڈڈ JSON پارس کریں، کمزور CSS نہیں۔ بہت سی رئیل اسٹیٹ سائٹس لسٹنگ ڈیٹا کو JSON-LD (schema.org) کے طور پر ظاہر کرتی ہیں؛ دستیاب ہو تو اسے پارس کریں، اور جب یہ موجود نہ ہو تو HTML کارڈز کو متبادل کے طور پر استعمال کریں۔
  • کچھ سائٹس مقام کے لحاظ سے مواد بدلتی ہیں: نتائج، دستیابی، زبان یا کرنسی خطے کے حساب سے بدل سکتی ہے، اس لیے جغرافیائی ہدف والی پروکسیز مخصوص مارکیٹ سے مطابقت میں مدد دیتی ہیں۔
  • بڑے پورٹلز کے دفاع سخت ہوتے ہیں۔ Zillow، Realtor.com، Rightmove اور اسی طرح کی سائٹس ڈیٹا سینٹر IPs کو تیزی سے ریٹ لمٹ اور فلیگ کرتی ہیں؛ گھومنے والی رہائشی پروکسیز مدد دیتی ہیں، لیکن کوئی ٹول رسائی یا تعمیل کی ضمانت نہیں دیتا۔
  • ایجنٹ اور مالک کی رابطہ تفصیلات ذاتی ڈیٹا ہیں۔ انہیں پائپ لائن سے باہر رکھیں؛ پراپرٹی کے حقائق جمع کریں، لوگوں کا ڈیٹا نہیں۔

آپ کون سا رئیل اسٹیٹ ڈیٹا اسکریپ کر سکتے ہیں؟

پراپرٹی لسٹنگز میں بھرپور اور منظم ڈیٹا ہوتا ہے۔ یہ وہ فیلڈز ہیں جو عموماً جمع کیے جا سکتے ہیں، اور وہ بھی جنہیں احتیاط سے سنبھالنا چاہیے:

  • کم خطرے والے پراپرٹی حقائق: قیمت، بیڈرومز، باتھ رومز، مربع فٹ رقبہ، لاٹ سائز، پراپرٹی کی قسم، تعمیر کا سال، لسٹنگ اسٹیٹس، مارکیٹ پر دن، اور قیمت کی تاریخ۔
  • احتیاط سے سنبھالیں یا گریز کریں: درست پتے، تصاویر اور مکمل تفصیلات (اکثر کاپی رائٹ شدہ)، اور ایجنٹس/مالکان کی رابطہ تفصیلات (ذاتی ڈیٹا)۔ عوامی دستیابی اس ڈیٹا کو خودکار طور پر دوبارہ قابلِ استعمال نہیں بناتی۔

کیا رئیل اسٹیٹ اسکریپنگ قانونی ہے؟

عوامی پراپرٹی حقائق جمع کرنا عموماً قابل دفاع سمجھا جاتا ہے، اور پرائس انٹیلی جنس اور پراپ ٹیک کے بہت سے کام اسی بنیاد پر چلتے ہیں۔ لیکن عوامی دستیابی سے ڈیٹا خود بخود غیر ذاتی یا دوبارہ قابل استعمال نہیں بن جاتا: پرائیویسی، کاپی رائٹ، ڈیٹابیس رائٹس، معاہدوں اور مقامی قانون کا جائزہ لیں۔ عملی حد یہ ہے: لاگ اِن کے پیچھے موجود مواد اسکریپ نہ کریں، ذاتی ڈیٹا (ایجنٹ/مالک کی تفصیلات) شامل نہ کریں، کاپی رائٹ شدہ تصاویر یا تفصیلات دوبارہ شائع نہ کریں، ہر سائٹ کی شرائط اور robots.txt کا احترام کریں، اور ایکسیس کنٹرولز یا CAPTCHAs کو بائی پاس نہ کریں۔ بڑے پورٹلز خودکار رسائی کو محدود کرتے ہیں، اس لیے ان کے لیے official API، لائسنس یافتہ ڈیٹا فیڈ یا تحریری اجازت کو ترجیح دیں۔ مکمل فریم ورک کے لیے ہماری گائیڈ دیکھیں: کیا ویب اسکریپنگ قانونی ہے۔ یہ عمومی معلومات ہیں، قانونی مشورہ نہیں۔


مرحلہ 1: اپنا ماحول سیٹ اپ کریں

وہ لائبریریاں انسٹال کریں جن کی رئیل اسٹیٹ اسکریپر کو ضرورت ہے۔ جامد اور JSON-LD دوست سائٹس requests کے ساتھ کام کرتی ہیں؛ Zillow جیسے جاوا اسکرپٹ پر بھاری پورٹلز کے لیے ہیڈ لیس براؤزر درکار ہوتا ہے۔



# Core libraries for real estate data scraping
# requests -> fetch pages | beautifulsoup4 + lxml -> parse HTML/JSON
pip install requests beautifulsoup4 lxml

# Many listing sites are JavaScript-heavy and well defended (e.g. Zillow).
# For those, add a headless browser:
pip install playwright && playwright install chromium







مرحلہ 2: لسٹنگز کا صفحہ حاصل کریں

مناسب ہیڈرز کے ساتھ سرچ نتائج کا صفحہ، مثلاً کسی شہر کا homes-for-sale URL، حاصل کریں اور اسے رہائشی پروکسی کے ذریعے روٹ کریں تاکہ لسٹنگز ہدف مارکیٹ سے مطابقت رکھیں۔



import requests

HEADERS = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                         "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36",
           "Accept-Language": "en-US,en;q=0.9"}

# Route through residential proxies for geo-accurate listings (see Step 5)
proxies = {"http":  "http://LOGIN:[email protected]:823",
           "https": "http://LOGIN:[email protected]:823"}

def get_html(url):
    r = requests.get(url, headers=HEADERS, proxies=proxies, timeout=30)
    r.raise_for_status()
    return r.text

html = get_html("https://example-realestate.com/homes/for_sale/CityName/")
















مرحلہ 3: ایمبیڈڈ JSON سے لسٹنگز نکالیں

جہاں یہ دستیاب ہو، پراپرٹی لسٹنگز کو اسکریپ کرنے کا سب سے قابل اعتماد طریقہ یہ ہے کہ وہ ساختی ڈیٹا پڑھا جائے جو سائٹ پہلے ہی ایمبیڈ کرتی ہے۔ بہت سے رئیل اسٹیٹ پلیٹ فارمز application/ld+json (schema.org) شامل کرتے ہیں، جس میں کسی لسٹنگ کی قیمت، پتہ اور URL ہوتا ہے۔ CSS کلاس ناموں کے برعکس یہ ری ڈیزائن کے باوجود عموماً مستحکم رہتا ہے۔ ہر سائٹ اسے ظاہر نہیں کرتی؛ کچھ ڈیٹا کو JS ایپ اسٹیٹ میں رکھتی ہیں، اس لیے ہر سائٹ کو چیک کریں اور جب ضرورت ہو تو مرحلہ 4 میں کارڈز کو پارس کرنے والے متبادل پر جائیں۔



import json
from bs4 import BeautifulSoup

LISTING_TYPES = ("Residence", "Product", "RealEstateListing", "Offer",
                 "SingleFamilyResidence", "Apartment", "House")

def listings_from_jsonld(html):
    """Where available, sites embed listing data as JSON-LD (schema.org).
    Parsing it is more stable than CSS classes — but not every site has it,
    so fall back to the cards in Step 4 when this returns nothing."""
    soup = BeautifulSoup(html, "lxml")
    nodes, out = [], []
    for tag in soup.find_all("script", type="application/ld+json"):
        try:
            data = json.loads(tag.string or "{}")
        except json.JSONDecodeError:
            continue
        stack = data if isinstance(data, list) else [data]
        while stack:                      # flatten @graph / ItemList / nested
            n = stack.pop()
            if not isinstance(n, dict):
                continue
            if "@graph" in n:
                stack.extend(n["@graph"])
            if n.get("@type") == "ItemList":
                stack.extend(x.get("item", x) for x in n.get("itemListElement", []))
            nodes.append(n)
    for n in nodes:
        types = n.get("@type", "")
        types = types if isinstance(types, list) else [types]
        if any(t in LISTING_TYPES for t in types):
            offers = n.get("offers") or {}
            if isinstance(offers, list):
                offers = offers[0] if offers else {}
            out.append({"name": n.get("name"),
                        "price": offers.get("price") or n.get("price"),
                        "address": n.get("address"),
                        "url": n.get("url")})
    return out

print(listings_from_jsonld(html)[:3])









































مرحلہ 4: لسٹنگ کارڈز کو پارس کریں (متبادل)

جب کوئی سائٹ صاف JSON-LD فراہم نہ کرے تو سرچ نتائج کے کارڈز کو براہ راست پارس کریں: قیمت، پتہ، بیڈرومز، باتھ رومز، مربع فٹ رقبہ اور لسٹنگ لنک۔ سلیکٹرز ہر سائٹ پر مختلف ہوتے ہیں اور اکثر بدلتے رہتے ہیں، اس لیے DevTools میں ان کی تصدیق کریں۔



def parse_listing_cards(html):
    """Fallback: parse the search-results cards directly. Selectors differ by
    site and change often — confirm the current ones in DevTools."""
    soup = BeautifulSoup(html, "lxml")
    cards = []
    for card in soup.select("[data-test='property-card']"):
        def t(sel):
            el = card.select_one(sel)
            return el.get_text(strip=True) if el else None
        cards.append({
            "price":   t("[data-test='property-price']"),
            "address": t("[data-test='property-address']"),
            "beds":    t("[data-test='property-beds']"),
            "baths":   t("[data-test='property-baths']"),
            "sqft":    t("[data-test='property-sqft']"),
            "url":     (card.select_one("a[href]") or {}).get("href"),
        })
    return cards


















مرحلہ 5: صفحہ بندی سنبھالیں

نتائج کا ایک صفحہ مکمل ڈیٹا سیٹ نہیں ہوتا۔ صفحات پر لوپ چلائیں یہاں تک کہ نتائج ختم ہو جائیں یا آپ مقررہ حد تک پہنچ جائیں، اور درخواستوں کی رفتار ایسی رکھیں کہ ریٹ لمٹس متحرک نہ ہوں۔



import time, random

def scrape_all_pages(base_url, max_pages=10):
    """Page through search results until empty or max_pages."""
    all_listings = []
    for page in range(1, max_pages + 1):
        html = get_html(f"{base_url}?page={page}")
        cards = parse_listing_cards(html)
        if not cards:        # no more results -> stop
            break
        all_listings.extend(cards)
        time.sleep(random.uniform(1, 3))   # pace requests
    return all_listings













مرحلہ 6: جغرافیائی طور پر درست، غیر مسدود ڈیٹا کے لیے پروکسیز استعمال کریں

پروکسیز کے بغیر رئیل اسٹیٹ ویب اسکریپنگ کو دو چیزیں مشکل بناتی ہیں۔ پہلی، مقام: کچھ سائٹس نتائج، دستیابی، زبان یا کرنسی کو خطے کے مطابق بدلتی ہیں، اس لیے مخصوص مارکیٹ سے مطابقت کے لیے آپ وہاں کے IP سے کوئری کرتے ہیں۔ دوسری، بلاکنگ: بڑے پورٹلز ڈیٹا سینٹر IPs کو جلد فلیگ کرتے ہیں اور سختی سے ریٹ لمٹ کرتے ہیں۔ DataImpulse رہائشی پروکسیز ($1/GB، گھومنے والی، شہر/ریاست کی ٹارگٹنگ کے ساتھ 195 ممالک) دونوں کاموں میں مدد کرتی ہیں: درست مارکیٹ کے حقیقی صارف IPs جو IP-based بلاکس کو کم کرتے ہیں۔ البتہ یہ رسائی کی ضمانت نہیں دیتیں، اور آپ کو پھر بھی ہر سائٹ کے اصولوں پر عمل کرنا ہوگا۔ درخواستوں کو ان کے ذریعے روٹ کریں اور جمع کیا گیا ڈیٹا ایکسپورٹ کریں۔



import time, random, json, csv

# Listings differ by region: route through a proxy in the target market so
# prices, availability, and currency match what a local user sees.
proxies = {
    "http":  "http://LOGIN__cr.us;sid.re1:[email protected]:823",
    "https": "http://LOGIN__cr.us;sid.re1:[email protected]:823",
}

listings = scrape_all_pages("https://example-realestate.com/homes/for_sale/CityName/")

with open("listings.json", "w", encoding="utf-8") as f:
    json.dump(listings, f, indent=2, ensure_ascii=False)
if listings:
    with open("listings.csv", "w", newline="", encoding="utf-8") as f:
        w = csv.DictWriter(f, fieldnames=listings[0].keys())
        w.writeheader(); w.writerows(listings)

















اکثر پوچھے جانے والے سوالات

کیا رئیل اسٹیٹ ڈیٹا اسکریپنگ قانونی ہے؟

عوامی، غیر ذاتی پراپرٹی ڈیٹا (قیمت، پتہ، بیڈرومز، مربع فٹ رقبہ) جمع کرنا پراپ ٹیک میں عموماً قابل دفاع اور عام عمل ہے۔ ذاتی ڈیٹا (ایجنٹ/مالک کے رابطے) سے گریز کریں، لاگ اِن کے پیچھے موجود ڈیٹا اسکریپ نہ کریں، کاپی رائٹ شدہ تصاویر یا تفصیلات دوبارہ شائع نہ کریں، اور سائٹ کی شرائط اور robots.txt کا احترام کریں۔ بڑے پورٹلز خودکار رسائی کو محدود کرتے ہیں، اس لیے تجارتی استعمال کے لیے اجازت یا قانونی مشاورت حاصل کریں۔ یہ عمومی معلومات ہیں، قانونی مشورہ نہیں۔ ہماری ویب اسکریپنگ کی قانونی حیثیت سے متعلق گائیڈ دیکھیں۔

پراپرٹی لسٹنگز اسکریپ کرنے کا بہترین طریقہ کیا ہے؟

وہ ساختی ڈیٹا پارس کریں جو سائٹس پہلے ہی ایمبیڈ کرتی ہیں۔ زیادہ تر رئیل اسٹیٹ پلیٹ فارمز لسٹنگز کو صفحے کے HTML میں JSON-LD (schema.org) کے طور پر بھیجتے ہیں، جو ہر ری ڈیزائن کے ساتھ بدلنے والے CSS کلاس ناموں کا پیچھا کرنے سے کہیں زیادہ مستحکم ہے۔ لسٹنگ کارڈز کو پارس کرنے پر صرف اس وقت واپس جائیں جب صاف JSON دستیاب نہ ہو۔

کیا رئیل اسٹیٹ سائٹس اسکریپ کرنے کے لیے مجھے پروکسیز کی ضرورت ہے؟

زیادہ حجم کے لیے عموماً ہاں۔ بڑے پورٹلز (Zillow, Realtor.com, Rightmove) ڈیٹا سینٹر IPs کو جلد ریٹ لمٹ اور فلیگ کرتے ہیں، اور کچھ لسٹنگز مقام پر منحصر ہوتی ہیں۔ ہدف مارکیٹ میں گھومنے والی رہائشی پروکسیز مقام کے لحاظ سے درست ڈیٹا واپس کرنے اور IP-based بلاکس کم کرنے میں مدد دیتی ہیں، اگرچہ وہ رسائی کی ضمانت نہیں دیتیں اور اسکریپنگ کو خود بخود تعمیل کے دائرے میں نہیں لاتیں۔

کیا میں Zillow یا Realtor.com کو براہ راست اسکریپ کر سکتا ہوں؟

وہ عوامی ہیں مگر سختی سے محفوظ، جاوا اسکرپٹ سے رینڈر ہونے والی سائٹس ہیں، اور ان کی شرائط خودکار رسائی کو محدود کرتی ہیں۔ ان پورٹلز کے لیے، ان کے دفاعی نظام سے بچنے کے بجائے official API، لائسنس یافتہ ڈیٹا فیڈ یا تحریری اجازت کو ترجیح دیں۔ اگر آپ عوامی ڈیٹا جمع کرتے ہیں تو صرف عوامی پراپرٹی حقائق لیں، لاگ آؤٹ رہیں، ایکسیس کنٹرولز بائی پاس نہ کریں، اور درخواستوں کو مناسب رفتار سے بھیجیں۔ ہماری Zillow کے لیے بہترین پروکسیز گائیڈ دیکھیں۔

میں کون سا رئیل اسٹیٹ ڈیٹا جمع کر سکتا ہوں؟

زیادہ تر عوامی پراپرٹی حقائق: قیمت، بیڈرومز، باتھ رومز، مربع فٹ رقبہ، لاٹ سائز، قسم، اسٹیٹس، مارکیٹ پر دن اور قیمت کی تاریخ۔ لیکن عوامی دستیابی خود بخود ڈیٹا کو غیر ذاتی یا دوبارہ قابل استعمال نہیں بناتی: درست پتے، تصاویر، تفصیلات اور ایجنٹ/مالک کی معلومات میں پرائیویسی یا کاپی رائٹ کی اہمیت ہو سکتی ہے، اس لیے محفوظ یا دوبارہ شائع کرنے سے پہلے جائزہ لیں۔


خلاصہ

رئیل اسٹیٹ ڈیٹا اسکریپنگ بکھری ہوئی لسٹنگز کو ایک قابل استعمال ڈیٹا سیٹ میں بدل دیتی ہے، اور قابل اعتماد طریقہ یہ ہے: جہاں ممکن ہو ایمبیڈڈ JSON-LD پڑھیں، جہاں یہ ممکن نہ ہو وہاں کارڈز کو پارس کریں، نتائج کے صفحات سے گزریں، اور ہر چیز کو جغرافیائی ہدف والی رہائشی پروکسیز کے ذریعے روٹ کریں تاکہ ڈیٹا مقام کے لحاظ سے درست رہے اور بلاک نہ ہو۔ عوامی، غیر ذاتی پراپرٹی حقائق تک محدود رہیں تو آپ زیادہ قابل دفاع دائرے میں رہتے ہیں۔ انفراسٹرکچر کے لیے، رئیل اسٹیٹ ڈیٹا کے لیے بہترین پروکسیز اور وسیع تر ویب اسکریپنگ کے لیے بہترین پروکسیز گائیڈ دیکھیں۔

آخری اپ ڈیٹ: June 25, 2026.




Share article: