أدوات جمع البيانات لكشط بيانات العقارات باستخدام بايثون

نشرت: 2019-08-12
عرض جدول المحتويات
لماذا الزحف إلى البيانات من مواقع العقارات؟
كيفية كشط بيانات العقارات باستخدام بايثون؟
أين المدونة؟
شرح الكود
بعض قوائم البيت التي كشطناها
كشط بيانات العقارات على نطاق واسع

تعد المواقع العقارية الرائدة في العالم كنزًا من البيانات القيمة. قد تحتوي قاعدة البيانات الخاصة بأي موقع عقارات أمريكي شهير على معلومات عن أكثر من 100 مليون منزل. تشمل هذه المنازل تلك المعروضة للبيع أو الإيجار أو حتى تلك التي لا توجد حاليًا في السوق. يوفر كشط بيانات العقارات بيانات عن تقديرات الإيجار والممتلكات التي تسمى "Zestimates" أيضًا. يساعد المالكين ، وكذلك العملاء ، على التخطيط بشكل أفضل من خلال محاولة تقدير أسعار العقارات في السنوات القادمة.

عندما يتعلق الأمر بشراء أو تأجير العقارات ، فإننا نعلم أن أول ما يتبادر إلى الذهن هو مقارنة الأسعار. توفر مواقع الإسكان هذه مقارنة الأسعار مع جميع القوائم الموجودة في تلك المنطقة ، بالإضافة إلى المعلومات الأساسية مثل نوع المنزل وعدد الغرف والحجم ووصف موجز وما إلى ذلك.

لماذا الزحف إلى البيانات من مواقع العقارات؟

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

يمكنك أيضًا إنشاء نماذج التعلم الآلي للتنبؤ بأسعار العقارات ومقارنة توقعاتك مع Zillow's Zestimates ومعرفة أيهما أفضل أو أقرب إلى القيم الفعلية.

كيفية كشط بيانات العقارات باستخدام بايثون؟

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

أين المدونة؟

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

[لغة الكود = "بيثون"]
#! / usr / bin / python
# - * - الترميز: utf-8 - * -

طلب استيراد urllib
استيراد urllib.parse
استيراد خطأ urllib
من bs4 استيراد BeautifulSoup
استيراد ssl
استيراد json
استيراد ast
استيراد نظام التشغيل
من طلب استيراد urllib.request ، urlopen

# لتجاهل أخطاء شهادة SSL

ctx = ssl.create_default_context ()
ctx.check_hostname = خطأ
ctx.verify_mode = ssl.CERT_NONE

# مدخلات من المستخدم

url = input ('أدخل عنوان URL لإدراج Zillow House-')

# جعل الموقع يعتقد أنك تصل إليه باستخدام متصفح الموزيلا

req = الطلب (url ، headers = {'User-Agent': 'Mozilla / 5.0'})
صفحة الويب = urlopen (req) .read ()

# إنشاء كائن BeautifulSoup من صفحة html لسهولة استخراج البيانات.

soup = BeautifulSoup (صفحة الويب ، "html.parser")
html = soup.prettify ('utf-8')
property_json = {}
property_json ['Details_Broad'] = {}
property_json ['Address'] = {}

# استخراج عنوان قائمة الممتلكات

للحصول على العنوان في soup.findAll ("العنوان"):
property_json ['Title'] = title.text.strip ()
فترة راحة

للميتا في soup.findAll ('meta'، attrs = {'name': 'description'}):
property_json ['Detail_Short'] = meta ['content']. strip ()

لـ div في soup.findAll ('div'، attrs = {'class': 'character-count-truncated'}):
property_json ['Details_Broad'] ['Description'] = div.text.strip ()

لـ (i، script) في التعداد (soup.findAll ('script'،
attrs = {'type': 'application / ld + json'})):
إذا كنت == 0:
json_data = json.loads (script.text)
property_json ['Details_Broad'] ['Number of Rooms'] = json_data ['numberOfRooms']
property_json ['Details_Broad'] ['Floor Size (in sqft)'] = json_data ['floorSize'] ['value']
property_json ['Address'] ['Street'] = json_data ['address'] ['streetAddress']
property_json ['Address'] ['Locality'] = json_data ['address'] ['addressLocality']
property_json ['Address'] ['Region'] = json_data ['address'] ['addressRegion']
property_json ['Address'] ['Postal Code'] = json_data ['address'] ['postalCode']
إذا كنت == 1:
json_data = json.loads (script.text)
property_json ['Price in $'] = json_data ['offer'] ['price']
property_json ['Image'] = json_data ['image']
فترة راحة

مع open ("data.json"، "w") كملف outfile:
json.dump (property_json ، outfile ، مسافة بادئة = 4)

مع open ('output_file.html'، 'wb') كملف:
file.write (html)

طباعة ('———- اكتمل استخراج البيانات. تحقق من ملف json .———-')
[/الشفرة]

لتشغيل الشفرة المذكورة أعلاه ، تحتاج إلى حفظها في ملف بالملحق ، مثل propertyScraper.py. بمجرد الانتهاء من ذلك ، من المحطة ، قم بتشغيل الأمر -

[لغة الكود = "بيثون"]
بيثون propertyScraper.py
[/الشفرة]

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

  1. https://www.zillow.com/homedetails/638-Grant-Ave-North-Baldwin-NY-11510/31220792_zpid/
  2. https://www.zillow.com/homedetails/10-Walnut-St-Arlington-MA-02476/56401372_zpid/

ملفات JSON التي تم الحصول عليها عند تشغيل الكود على المعطى في موضوع فرعي لاحق.

شرح الكود

قبل الخوض في كيفية تشغيل الكود وما يتم إرجاعه ، من المهم فهم الكود نفسه. كالعادة ، نضغط أولاً على عنوان URL المحدد ونلتقط HTML بالكامل الذي قمنا بتحويله إلى كائن حساء جميل. بمجرد الانتهاء من ذلك ، نقوم باستخراج عناصر div ونصوص وعناوين وعلامات أخرى ذات سمات محددة. بهذه الطريقة يمكننا تحديد المعلومات المحددة التي قد نرغب في استخراجها من الصفحة.

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

بعض قوائم البيت التي كشطناها

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

حصلنا على صورة للممتلكات (على الرغم من توفر العديد من الصور لكل خاصية على صفحة القائمة ، فقد حصلنا على صورة لكل منها - وهذه هي الصورة العلوية لكل قائمة). حصلنا أيضًا على السعر (بالدولار) الذي تم إدراجه فيه وعنوان العقار ووصفًا له يساعدك في تكوين صورة ذهنية للممتلكات.

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

[لغة الكود = "بيثون"]
{
"تفاصيل_طريقة": {
"عدد الغرف": 4 ،
"حجم الأرضية (بالقدم المربع)": "1.728"
} ،
"تبوك": {
"الشارع": "638 Grant Ave" ،
"المكان": "شمال بالدوين" ،
"المنطقة": "نيويورك"،
"الرمز البريدي": "11510"
} ،
"العنوان": "638 Grant Ave، North Baldwin، NY 11510 | MLS # 3137924 | Zillow "،
"Detail_Short": "638 Grant Ave، North Baldwin، NY 11510-1332 هو منزل لأسرة واحدة معروض للبيع بسعر 299.000 دولار. المنزل الذي تبلغ مساحته 1728 قدمًا مربعًا مكون من 4 أسرّة و 2.0 حمام. اعثر على 31 صورة لمنزل 638 Grant Ave في Zillow. عرض المزيد من تفاصيل العقارات وسجل المبيعات وبيانات Zestimate على Zillow. MLS # 3137924 "،
"السعر بالدولار": 299000 ،
"صورة": "https://photos.zillowstatic.com/p_h/ISzz1p7wk4ktye1000000000.jpg"
}
[/الشفرة]

[لغة الكود = "بيثون"]
{
"تفاصيل_طريقة": {
"الوصف": "منزل عائلي واحد مكون من ثلاثة نوابض يقع في حي Brattle في أرلينغتون بين Arlington Heights و Arlington Center. تم بناء هذا المنزل في عشرينيات القرن الماضي ، ويوفر تفاصيل رائعة عن الفترة الزمنية ، وأرضيات خشبية صلبة ، وأسقف ذات عوارض خشبية ، وغرفة معيشة مدفأة مع غرفة تشمس خاصة ، وغرفة طعام رسمية ، وثلاث غرف نوم كبيرة ، ومكتب ، وحمامان كاملان. تعد إمكانية تحسين هذه الخاصية لتوسيع مساحة المعيشة وإضفاء الطابع الشخصي على ذوقك الشخصي أمرًا استثنائيًا. بالقرب من Minuteman Commuter Bikeway و Rt 77 و 79 خطوط الحافلات والمدارس والتسوق والمطاعم. يتم توفير صور التدريج الافتراضي والتجديد الافتراضي لمساعدتك على التصور. "،
"عدد الغرف": 4 ،
"حجم الأرضية (بالقدم المربع)": "2224"
} ،
"تبوك": {
"شارع": "10 شارع الجوز" ،
"المنطقة المحلية": "أرلينغتون" ،
"المنطقة": "MA" ،
"الرمز البريدي": "02476"
} ،
"العنوان": "10 Walnut St، Arlington، MA 02476 | MLS # 72515880 | Zillow "،
"Detail_Short": "10 Walnut St، Arlington، MA 02476-6116 هو منزل لأسرة واحدة معروض للبيع بسعر 725.000 دولار. المنزل الذي تبلغ مساحته 2224 قدمًا مربعًا مكون من 4 أسرّة و 2.0 حمام. اعثر على 34 صورة لمنزل 10 Walnut St home في Zillow. عرض المزيد من تفاصيل العقارات وسجل المبيعات وبيانات Zestimate على Zillow. MLS # 72515880 "،
"السعر بالدولار": 725000 ،
"صورة": "https://photos.zillowstatic.com/p_h/ISifzwig3xt2re1000000000.jpg"
}
[/الشفرة]

[لغة الكود = "بيثون"]
{
"تفاصيل_طريقة": {
"عدد الغرف": 4 ،
"حجم الأرضية (بالقدم المربع)": "1.728"
} ،
"تبوك": {
"الشارع": "638 Grant Ave" ،
"المكان": "شمال بالدوين" ،
"المنطقة": "نيويورك" ،
"الرمز البريدي": "11510"
} ،
"العنوان": "638 Grant Ave، North Baldwin، NY 11510 | MLS # 3137924 | Zillow "،
"Detail_Short": "638 Grant Ave، North Baldwin، NY 11510-1332 هو منزل لأسرة واحدة معروض للبيع بسعر 299.000 دولار. المنزل الذي تبلغ مساحته 1728 قدمًا مربعًا مكون من 4 أسرّة و 2.0 حمام. اعثر على 31 صورة لمنزل 638 Grant Ave في Zillow. عرض المزيد من تفاصيل العقارات وسجل المبيعات وبيانات Zestimate على Zillow. MLS # 3137924 "،
"السعر بالدولار": 299000 ،
"صورة": "https://photos.zillowstatic.com/p_h/ISzz1p7wk4ktye1000000000.jpg"
}
[/الشفرة]

كشط بيانات العقارات على نطاق واسع

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

PromptCloud ، بصفتها شركة رائدة في توفير خدمات تجريف الويب ، تعتقد أن حلول تجريف الويب يجب أن تكون خالية من المتاعب ويجب أن تحتوي على خطوتين فقط - العميل يعطي المطلب ويتلقى بيانات نظيفة.

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


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