In this Article
رئیل اسٹیٹ ڈیٹا اسکریپنگ وہ طریقہ ہے جس سے پراپرٹی پلیٹ فارمز، سرمایہ کار، اور proptech ٹیمیں بکھری ہوئی آن لائن لسٹنگز کو ایک منظم ڈیٹاسیٹ میں بدلتی ہیں — قیمتیں، پتے، بیڈز، باتھز، مربع فٹ، اور پوری مارکیٹ کے رجحانات۔ یہ گائیڈ دکھاتی ہے کہ Python کے ساتھ پراپرٹی لسٹنگز کو مضبوط طریقے سے کیسے اسکریپ کیا جائے (اس structured data کو پارس کر کے جو سائٹس پہلے ہی embed کرتی ہیں)، ساتھ ہی anti-bot اور proxy سیٹ اپ بھی جو مختلف خطوں میں کلیکشن کو جاری رکھتا ہے۔
میں Andrii Byzov ہوں، ایک AI-Native Fractional CMO جو web-data pipelines بناتا ہے۔ ذیل میں: کون سا رئیل اسٹیٹ ڈیٹا آپ اکٹھا کر سکتے ہیں، ایک واضح قانونی حد، اور سرچ نتائج اور انفرادی لسٹنگز کے لیے کام کرنے والا کوڈ — geo-accurate، unblocked ڈیٹا کے لیے residential proxies کے ساتھ۔
اہم حقائق
- زیادہ تر لسٹنگ حقائق عوامی اور کم خطرے والے ہوتے ہیں — قیمت، بیڈز/باتھز، sqft، قسم — لیکن پتے، تصاویر، تفصیلات اور ایجنٹ کے نام ذاتی یا کاپی رائٹ شدہ ہو سکتے ہیں، اس لیے دوبارہ استعمال سے پہلے جائزہ لیں۔
- جہاں موجود ہو وہاں embedded JSON پارس کریں، نازک CSS نہیں۔ بہت سی real estate سائٹس listing data کو JSON-LD (schema.org) کے طور پر ظاہر کرتی ہیں؛ دستیاب ہونے پر اسے پارس کریں اور جب یہ موجود نہ ہو تو HTML کارڈز پر fallback کریں۔
- کچھ سائٹس location کے لحاظ سے personalize کرتی ہیں — نتائج، دستیابی، زبان، یا کرنسی — اس لیے geo-targeted proxies مخصوص مارکیٹ سے مطابقت میں مدد دیتے ہیں۔
- بڑے portals سخت دفاع کرتے ہیں۔ Zillow، Realtor.com، Rightmove اور اسی طرح کی سائٹس datacenter IPs کو تیزی سے rate-limit اور flag کرتی ہیں؛ rotating residential proxies مدد دیتے ہیں، لیکن کوئی tool رسائی یا compliance کی ضمانت نہیں دیتا۔
- ایجنٹ اور مالک کی contact details ذاتی ڈیٹا ہیں۔ انہیں pipeline سے باہر رکھیں؛ property facts جمع کریں، لوگ نہیں۔
آپ کون سا رئیل اسٹیٹ ڈیٹا اسکریپ کر سکتے ہیں؟
پراپرٹی لسٹنگ بھرپور، منظم ڈیٹا ہوتی ہے۔ وہ فیلڈز جو عموماً جمع کرنے کے قابل ہوتی ہیں — اور جنہیں احتیاط سے سنبھالنا چاہیے:
- کم خطرے والے پراپرٹی حقائق: قیمت، بیڈرومز، باتھ رومز، مربع فٹ رقبہ، لاٹ سائز، پراپرٹی کی قسم، تعمیر کا سال، لسٹنگ اسٹیٹس، مارکیٹ پر دن، اور قیمت کی تاریخ۔
- احتیاط سے سنبھالیں یا گریز کریں: درست پتے، تصاویر اور مکمل تفصیلات (اکثر کاپی رائٹ شدہ)، اور ایجنٹس/مالکان کی رابطہ تفصیلات (ذاتی ڈیٹا)۔ عوامی دستیابی اس ڈیٹا کو خودکار طور پر دوبارہ قابلِ استعمال نہیں بناتی۔
کیا رئیل اسٹیٹ اسکریپنگ قانونی ہے؟
عوامی پراپرٹی حقائق جمع کرنا وسیع طور پر قابلِ دفاع ہے، اور یہی پرائس انٹیلی جنس اور proptech کے کام کرنے کا طریقہ ہے — لیکن عوامی دستیابی ڈیٹا کو خودکار طور پر غیر ذاتی یا دوبارہ قابلِ استعمال نہیں بناتی: پرائیویسی، کاپی رائٹ، ڈیٹابیس رائٹس، معاہدوں، اور مقامی قانون کا جائزہ لیں۔ عملی حد یہ ہے: لاگ اِن کے پیچھے اسکریپ نہ کریں، ذاتی ڈیٹا (ایجنٹ/مالک کی تفصیلات) شامل نہ کریں، کاپی رائٹ شدہ تصاویر یا تفصیلات دوبارہ شائع نہ کریں، ہر سائٹ کی شرائط اور robots.txt کا احترام کریں، اور ایکسیس کنٹرولز یا CAPTCHAs کو بائی پاس نہ کریں۔ بڑے پورٹلز خودکار رسائی کو محدود کرتے ہیں، اس لیے ان کے لیے official API، لائسنس یافتہ ڈیٹا فیڈ، یا تحریری اجازت کو ترجیح دیں۔ مکمل فریم ورک کے لیے، ہماری گائیڈ دیکھیں کہ کیا ویب اسکریپنگ قانونی ہے۔ یہ عمومی معلومات ہیں، قانونی مشورہ نہیں۔
مرحلہ 1 — اپنا ماحول سیٹ اپ کریں
وہ لائبریریاں انسٹال کریں جن کی real estate scraper کو ضرورت ہے۔ Static، JSON-LD-friendly سائٹس requests کے ساتھ کام کرتی ہیں؛ Zillow جیسے JavaScript-heavy پورٹلز کو headless browser کی ضرورت ہوتی ہے۔
# 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 — لسٹنگز کا صفحہ حاصل کریں
مناسب headers کے ساتھ ایک search-results صفحہ (کسی شہر کے homes-for-sale URL) حاصل کریں، جسے residential proxy کے ذریعے روٹ کیا گیا ہو تاکہ listings ہدف مارکیٹ سے مطابقت رکھیں۔
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 سے لسٹنگز نکالیں
جہاں یہ دستیاب ہو، پراپرٹی لسٹنگز کو اسکریپ کرنے کا سب سے قابلِ اعتماد طریقہ یہ ہے کہ وہ structured data پڑھا جائے جو سائٹ پہلے ہی ایمبیڈ کرتی ہے۔ بہت سے real estate پلیٹ فارمز application/ld+json (schema.org) شامل کرتے ہیں، جس میں کسی لسٹنگ کی قیمت، پتہ، اور URL ہوتا ہے — CSS class names کے برعکس، یہ redesigns کے باوجود مستحکم رہتا ہے۔ ہر سائٹ اسے ظاہر نہیں کرتی (کچھ data کو JS app state میں رکھتے ہیں)، اس لیے ہر ایک کو چیک کریں اور Step 4 میں cards کو parse کرنے کے fallback پر جائیں۔
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 — لسٹنگ کارڈز کو پارس کریں (Fallback)
جب کوئی سائٹ صاف JSON-LD فراہم نہ کرے، تو سرچ رزلٹ کارڈز کو براہِ راست پارس کریں: قیمت، پتہ، بیڈز، باتھز، sqft، اور لسٹنگ لنک۔ Selectors ہر سائٹ کے لحاظ سے مختلف ہوتے ہیں اور اکثر بدلتے رہتے ہیں، اس لیے 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 — صفحہ بندی سنبھالیں
نتائج کا ایک صفحہ dataset نہیں ہوتا۔ صفحات میں loop چلائیں یہاں تک کہ نتائج ختم ہو جائیں یا آپ cap تک پہنچ جائیں، requests کی رفتار اس طرح رکھیں کہ آپ rate limits کو trigger نہ کریں۔
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 — جغرافیائی طور پر درست، غیر مسدود ڈیٹا کے لیے Proxies استعمال کریں
Proxies کے بغیر real estate web scraping کو دو چیزیں مشکل بناتی ہیں۔ پہلی، location: کچھ سائٹس نتائج، دستیابی، زبان، یا کرنسی کو خطے کے مطابق ذاتی بناتی ہیں، اس لیے کسی مخصوص مارکیٹ سے مطابقت کے لیے آپ وہاں کے IP سے query کرتے ہیں۔ دوسری، blocking: بڑے portals datacenter IPs کو جلد flag کرتے ہیں اور سختی سے rate-limit کرتے ہیں۔ DataImpulse residential proxies ($1/GB، rotating، city/state targeting کے ساتھ 195 countries) دونوں میں مدد کرتے ہیں — درست مارکیٹ میں real-user IPs جو IP-based blocks کو کم کرتے ہیں — اگرچہ رسائی کی ضمانت نہیں ہے اور آپ کو پھر بھی ہر سائٹ کے rules پر عمل کرنا ہوگا۔ Requests کو ان کے ذریعے route کریں اور جمع کیا گیا data export کریں۔
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)
اکثر پوچھے جانے والے سوالات
کیا real estate data scraping قانونی ہے؟
عوامی، غیر ذاتی پراپرٹی ڈیٹا (قیمت، پتہ، بیڈز، sqft) جمع کرنا proptech میں عمومی طور پر قابل دفاع اور معیاری عمل ہے۔ ذاتی ڈیٹا (ایجنٹ/مالک کے رابطے) سے گریز کریں، لاگ اِن کے پیچھے موجود ڈیٹا scrape نہ کریں، کاپی رائٹ شدہ تصاویر یا تفصیلات دوبارہ شائع نہ کریں، اور سائٹ کی شرائط اور robots.txt کا احترام کریں۔ بڑے پورٹلز خودکار رسائی کو محدود کرتے ہیں، اس لیے تجارتی استعمال کے لیے اجازت یا قانونی مشاورت حاصل کریں۔ یہ عمومی معلومات ہیں، قانونی مشورہ نہیں — ہماری web scraping کی قانونی حیثیت سے متعلق گائیڈ دیکھیں۔
پراپرٹی لسٹنگز scrape کرنے کا بہترین طریقہ کیا ہے؟
وہ structured data parse کریں جو سائٹس پہلے ہی embed کرتی ہیں — زیادہ تر real estate پلیٹ فارمز لسٹنگز کو صفحے کے HTML میں JSON-LD (schema.org) کے طور پر بھیجتے ہیں، جو ہر redesign کے ساتھ بدلنے والے CSS class ناموں کا پیچھا کرنے سے کہیں زیادہ مستحکم ہے۔ listing cards کو parse کرنے پر صرف اس وقت واپس جائیں جب صاف JSON دستیاب نہ ہو۔
کیا real estate سائٹس scrape کرنے کے لیے مجھے proxies کی ضرورت ہے؟
زیادہ حجم کے لیے، عموماً ہاں۔ بڑے پورٹلز (Zillow, Realtor.com, Rightmove) datacenter IPs کو جلدی rate-limit اور flag کرتے ہیں، اور کچھ لسٹنگز location-dependent ہوتی ہیں۔ target market میں rotating residential proxies مقام کے لحاظ سے درست ڈیٹا واپس کرنے اور IP-based blocks کم کرنے میں مدد دیتے ہیں — اگرچہ وہ رسائی کی ضمانت نہیں دیتے یا scraping کو compliant نہیں بناتے۔
کیا میں Zillow یا Realtor.com کو براہ راست scrape کر سکتا ہوں؟
وہ عوامی ہیں مگر سختی سے محفوظ، JavaScript-rendered ہیں، اور ان کی شرائط خودکار رسائی کو محدود کرتی ہیں۔ ان پورٹلز کے لیے، ان کے دفاعی نظام سے بچنے کے بجائے official API، licensed data feed، یا تحریری اجازت کو ترجیح دیں۔ اگر آپ عوامی ڈیٹا جمع کرتے ہیں، تو صرف عوامی پراپرٹی facts لیں، logged out رہیں، access controls bypass نہ کریں، اور requests کو مناسب رفتار سے بھیجیں۔ ہماری Zillow کے لیے بہترین proxies گائیڈ دیکھیں۔
میں کون سا real estate data جمع کر سکتا ہوں؟
زیادہ تر عوامی پراپرٹی facts — قیمت، بیڈز، باتھز، square footage، lot size، قسم، status، days on market، price history۔ لیکن عوامی دستیابی خود بخود ڈیٹا کو غیر ذاتی یا دوبارہ قابل استعمال نہیں بناتی: exact addresses، photos، descriptions، اور agent/owner details میں privacy یا copyright کی اہمیت ہو سکتی ہے، اس لیے store یا republish کرنے سے پہلے جائزہ لیں۔
خلاصہ
Real estate data scraping بکھری ہوئی listings کو ایک قابلِ استعمال dataset میں بدل دیتی ہے — اور قابلِ اعتماد طریقہ یہ ہے: جہاں ممکن ہو embedded JSON-LD پڑھیں، جہاں یہ ممکن نہ ہو وہاں cards کو parse کرنے پر جائیں، results کے pages سے گزریں، اور ہر چیز کو geo-targeted residential proxies کے ذریعے route کریں تاکہ data location-accurate اور unblocked رہے۔ public، non-personal property facts تک محدود رہیں تو آپ defensible lane میں رہتے ہیں۔ infrastructure کے لیے، real estate data کے لیے بہترین proxies اور وسیع تر web scraping کے لیے بہترین proxies guide دیکھیں۔
آخری اپ ڈیٹ: June 25, 2026.
