انتقل إلى المحتوى

كيفية استخراج البيانات من Zillow: دليل خطوة بخطوة لمحترفي العقارات

باعتبارها واحدة من المواقع العقارية الأكثر شعبية مع أكثر من 200 مليون زيارة شهرية، تقدم Zillow كنزًا من البيانات لمحترفي الصناعة. ومن خلال جمع كل هذه البيانات وتحليلها، يمكنك الكشف عن رؤى سوقية قوية لتعزيز أعمالك.

ولكن من أين تبدأ؟ لا داعي للخوف - في هذا الدليل، سأشارك التقنيات الدقيقة التي صقلتها على مدار أكثر من 10 سنوات في استخراج بيانات الويب لإنشاء أداة Zillow Scraper قابلة للتطوير من البداية.

لماذا تعتبر Zillow Data منجم ذهب؟

دعونا نتحدث أولا عن لماذا يتخلص المستثمرون والوكلاء الأذكياء من Zillow في المقام الأول:

  • كشف الفرص: تحليل بيانات الأسعار والطلب لتحديد المجالات الصاعدة أو المقومة بأقل من قيمتها.
  • إثراء قاعدة البيانات الخاصة بك: قم بزيادة سجلات عملائك بتفاصيل الممتلكات مثل الأسرة والحمامات وقيم الضرائب.
  • مراقبة المنافسة: احتفظ بعلامات تبويب على القوائم الجديدة من الوكلاء الآخرين الذين يدخلون السوق.
  • تأكيد حالة العقار: تم بيع المنازل مؤخرًا للتحقق من مطالبات المالكين الحاليين.
  • كشف اتجاهات السوق: زيادة فورية في الطلب على العقارات القريبة من المشاريع التجارية الجديدة.

مع أكثر من 9 مليارات زيارة وأكثر من 50 مليون مستخدم نشط شهريًا، توفر Zillow عمقًا واتساعًا لا مثيل لهما في البيانات العقارية.

التحديات التي يجب التغلب عليها

وبطبيعة الحال، فإن الاستفادة من كل تلك البيانات ليس بالأمر السهل دائمًا. فيما يلي بعض العقبات الشائعة التي قد تواجهها:

  • كشف البوت: تقوم Zillow بحظر أدوات الكشط باستخدام رموز التحقق ومرشحات IP والدفاعات الأخرى.
  • عرض جافا سكريبت: يتم تحميل التفاصيل الأساسية ديناميكيًا عبر JS.
  • تغييرات التخطيط المتكررة: التحديثات تكسر الكاشطات باستمرار.
  • تحديد المعدل: كتل عدوانية على الطلبات في الدقيقة الواحدة.

لكن لا تقلق، سأشاركك طرقًا مجربة لمعالجة كل مشكلة. باستخدام النهج الصحيح، يمكنك استخراج آلاف السجلات يوميًا من Zillow بشكل موثوق.

الخطوة 1: إعداد بيئة تجريف ويب Python

لهذا المشروع سوف نستخدم بايثون – اللغة المثالية لتقطيع الويب وتحليل البيانات.

أولاً، قم بتثبيت Python 3.6 أو أعلى إذا لم يكن لديك بالفعل. أوصي بإنشاء بيئة افتراضية لعزل التبعيات:

python3 -m venv zillowscraping

قم بتنشيط البيئة، ثم قم بتثبيت الحزم التي نحتاجها:

pip install requests beautifulsoup4 pandas matplotlib selenium webdriver-manager

وهذا يمنحنا أدوات لإرسال الطلبات، وتحليل HTML، وتحليل البيانات، وأتمتة المتصفحات، والمزيد.

الآن يمكن أن تبدأ المتعة حقًا!

الخطوة 2: فحص الصفحات المستهدفة

بعد ذلك، سنقوم يدويًا بتحليل الصفحات التي نريد استخراجها باستخدام أدوات مطور المتصفح:

أدوات مطور المتصفح

في صفحة نتائج البحث، يبدو HTML كما يلي:

<div class="property-card">
  <div class="details">
    <div class="price">$299,000</div> 
    <div class="address">
      <a href="/ar/1234-maple-st">1234 Maple St</a>
    </div>
    <div class="specs">
      3 bd | 2 ba | 1,420 sqft
    </div>
  </div>
</div>

يمكننا رؤية عناصر واضحة للسعر والعنوان والأسرة والحمامات والمساحة المربعة. لطيف - جيد!

الآن دعونا نتحقق من صفحة القائمة الفردية:

<script>window.dataLayer = [{"property":"1234 Maple St"}];</script>

<div id="price"></div>

<script src="getDetails.js"></script>

حسنًا...يتم تحميل التفاصيل ديناميكيًا عبر JavaScript. لا توجد مشكلة – يمكننا استخدام السيلينيوم لعرض الصفحات واستخراج البيانات التي نريدها.

الخطوة 3: كشط صفحة نتائج البحث

متسلحين باستكشافنا، فلنتخلص من نتائج البحث هذه.

أولاً سنطلب صفحة HTML:

import requests

url = "https://zillow.com/my-search-results/"
headers = {"User-Agent": "Mozilla..."} 

response = requests.get(url, headers=headers)
html = response.text

ثم يمكننا التحليل مع الحساء الجميل:

from bs4 import BeautifulSoup

soup = BeautifulSoup(html, "html.parser")

الآن قم باستخراج البيانات:

cards = soup.find_all("div", class_="property-card")

for card in cards:
  price = card.find("div", class_="price").text
  address = card.find("a").text
  beds, baths, sqft = card.find("div", class_="specs").text.split("|")

  print({
    "price": price, 
    "address": address,
    ...
  })

للتعامل مع ترقيم الصفحات، يمكننا التحقق من وجود رابط "التالي" وتكرار العملية حتى لا يتبقى أي صفحات أخرى.

الخطوة 4: كشط صفحة التفاصيل باستخدام السيلينيوم

بالنسبة لصفحات القائمة الفردية، سنستخدم عنصر السيلينيوم لأتمتة المتصفح وتقديم JavaScript.

تثبيت برنامج ChromeDriver:

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

driver = webdriver.Chrome(ChromeDriverManager().install()) 

الآن يمكننا استخراج التفاصيل:

def get_listing_data(url):

  driver.get(url)

  price = driver.find_element_by_id("price").text
  address = driver.find_element_by_id("address").text
  ...

  return {
    "price": price,
    "address": address,
    ...
  }

قم باستدعاء هذه الوظيفة لاستخراج كل صفحة أثناء قيامنا بالتكرار عبر عناوين URL لنتائج البحث.

الخطوة 5: تجنب الحظر باستخدام الوكلاء ووكلاء المستخدم

لتجنب دفاعات Zillow، من الضروري توجيه الطلبات من خلالها وكلاء وتدوير بانتظام وكلاء المستخدم:

from random import choice 

proxies = ["192.168.1.1:8080", "192.168.1.2:8080"...]
user_agents = ["UA1", "UA2"...]

proxy = choice(proxies)
headers = {"User-Agent": choice(user_agents)}

response = requests.get(url, proxies={"http": proxy, "https": proxy}, headers=headers)

يساعد هذا في توزيع الطلبات عبر العديد من عناوين IP المختلفة وتقليد المستخدمين الحقيقيين.

أوصي بالشراكة مع خدمات الوكيل مثل BrightData أو SmartProxy أو Microleaves للوصول إلى الملايين من عناوين IP السكنية المثالية لتفادي الحظر.

الخطوة 6: تنفيذ التقييد وإعادة المحاولة

لتجنب الوصول إلى حدود المعدل، نحتاج إلى تقليل الطلبات عن طريق إضافة تأخيرات عشوائية:

from time import sleep
from random import randint

# Make request
sleep(randint(1, 5)) # Random delay

واستخدم المحاولة/باستثناء الكتل لإعادة المحاولة عند حدوث أخطاء:

from requests.exceptions import RequestException

try:
  response = requests.get(url)
except RequestException as e:
  # Retry with exponential backoff
  sleep(2**num_retries)  
  response = requests.get(url) 

يؤدي هذا إلى إنشاء مكشطة مرنة يمكنها التغلب على المشكلات المتقطعة.

الخطوة 7: تخزين البيانات المسروقة

بمجرد كشطها، نحتاج إلى تخزين البيانات. بالنسبة للمشاريع الصغيرة، قد تكون ملفات CSV كافية:

import csv

with open("zillow.csv", "w") as f:
  writer = csv.writer(f)
  writer.writerow(["Address", "Price", "Beds", "Baths" ...])
  for listing in listings:
    writer.writerow(listing)  

بالنسبة لمجموعات البيانات الأكبر حجمًا، قم بالتحميل إلى قاعدة بيانات SQL أو مخزن NoSQL مثل MongoDB. يتيح ذلك إنشاء لوحات معلومات وخرائط تفاعلية للكشف عن الأفكار!

دعونا نبدأ كشط!

إليكم الأمر – عملية تم اختبارها في المعركة لاستخراج البيانات العقارية من Zillow. يمكنك الآن الاستفادة من قوائمها الوفيرة للارتقاء بعملك إلى المستوى التالي.

عندما تبدأ في عملية التجريد، لا تتردد في التواصل معنا إذا كانت لديك أي أسئلة أخرى! يسعدني دائمًا مساعدة زملائي المحترفين في مجال العقارات على استخدام البيانات بشكل أكثر فعالية.

اسمحوا لي أن أعرف بمجرد البدء في استخراج الآلاف من قوائم Zillow الجديدة كل يوم!

الوسوم (تاج):

الانضمام إلى محادثة

لن يتم نشر عنوان بريدك الإلكتروني. الحقول المشار إليها إلزامية *