เครื่องมือขูดข้อมูลสำหรับการขูดข้อมูลอสังหาริมทรัพย์โดยใช้ Python

เผยแพร่แล้ว: 2019-08-12
สารบัญ แสดง
ทำไมต้องรวบรวมข้อมูลจากเว็บไซต์อสังหาริมทรัพย์?
จะขูดข้อมูลอสังหาริมทรัพย์โดยใช้ Python ได้อย่างไร
เดอะโค้ดอยู่ที่ไหน?
คำอธิบายรหัส
รายชื่อบ้านบางส่วนที่เราคัดลอกมา
ขูดข้อมูลอสังหาริมทรัพย์ในขนาดใหญ่

เว็บไซต์อสังหาริมทรัพย์ชั้นนำของโลกเป็นขุมสมบัติของข้อมูลอันมีค่า ฐานข้อมูลของเว็บไซต์อสังหาริมทรัพย์ยอดนิยมของสหรัฐฯ อาจมีข้อมูลเกี่ยวกับบ้านมากกว่า 100 ล้านหลัง บ้านเหล่านี้รวมถึงบ้านสำหรับขาย ให้เช่า หรือแม้แต่บ้านที่ไม่ได้อยู่ในตลาดในปัจจุบัน การขูดข้อมูลอสังหาริมทรัพย์ให้ข้อมูลสำหรับค่าเช่าและการประมาณทรัพย์สินที่เรียกว่า "Zestimates" เช่นกัน ช่วยให้เจ้าของและลูกค้าวางแผนได้ดีขึ้นโดยพยายามประเมินราคาอสังหาริมทรัพย์ในปีต่อๆ ไป

เมื่อพูดถึงการซื้อหรือเช่าอสังหาริมทรัพย์ เรารู้ว่าสิ่งแรกที่อยู่ในใจคือการเปรียบเทียบราคา ไซต์สำหรับที่อยู่อาศัยเหล่านี้ให้การเปรียบเทียบราคากับรายชื่อทั้งหมดในพื้นที่นั้น รวมทั้งข้อมูลพื้นฐาน เช่น ประเภทของบ้าน จำนวนห้อง ขนาด คำอธิบายสั้นๆ เป็นต้น

ทำไมต้องรวบรวมข้อมูลจากเว็บไซต์อสังหาริมทรัพย์?

บริษัทจดทะเบียนอสังหาริมทรัพย์รายใหญ่ตั้งเป้าหมายทั่วทั้งภูมิภาคและดำเนินการกับอสังหาริมทรัพย์หลายล้านแห่ง แต่ในกรณีที่คุณเป็นตัวแทนอสังหาริมทรัพย์ แทนที่จะพยายามรวบรวมข้อมูลด้วยตนเอง คุณสามารถรวบรวมข้อมูลจากเว็บไซต์รายชื่ออสังหาริมทรัพย์รายใหญ่ได้ดียิ่งขึ้น

คุณยังสามารถสร้างโมเดล Machine Learning เพื่อทำนายราคาของอสังหาริมทรัพย์และเปรียบเทียบการคาดคะเนของคุณกับ Zestimates ของ Zillow และดูว่าอันไหนดีกว่าหรือใกล้เคียงกับค่าจริงมากกว่า

จะขูดข้อมูลอสังหาริมทรัพย์โดยใช้ Python ได้อย่างไร

ในกรณีที่คุณได้ติดตามบทความ "วิธีการรวบรวมข้อมูลหรือ scape" ก่อนหน้านี้ คุณอาจมีการตั้งค่าที่จำเป็นพร้อมบนคอมพิวเตอร์ของคุณแล้ว ในกรณีที่คุณยังไม่มี เราขอแนะนำให้คุณทำตามบทความนี้เพื่อตั้งค่า data scraping python, แพ็คเกจ และ text editor ก่อนที่คุณจะจัดการกับโค้ดได้

เดอะโค้ดอยู่ที่ไหน?

โดยไม่ต้องกังวลใจมากนัก เราจึงตัดสินใจนำโค้ดสำหรับการขูดข้อมูลอสังหาริมทรัพย์มาให้คุณโดยใช้ python ซึ่งจะช่วยคุณดึงข้อมูลจากเว็บไซต์รายชื่ออสังหาริมทรัพย์ โค้ดรวบรวมข้อมูลเขียนด้วย Python และต่อมา ผมจะแสดงวิธีเรียกใช้และสิ่งที่คุณจะได้รับเมื่อเรียกใช้

[รหัสภาษา =”หลาม”]
#!/usr/bin/python
# -*- การเข้ารหัส: utf-8 -*-

นำเข้า urllib.request
นำเข้า urllib.parse
นำเข้า urllib.error
จาก 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('Enter Zillow House Listing Url- ')

# ทำให้เว็บไซต์เชื่อว่าคุณกำลังเข้าถึงโดยใช้เบราว์เซอร์ Mozilla

req = คำขอ (url, headers={'User-Agent': 'Mozilla/5.0'})
หน้าเว็บ = urlopen(req).read()

# การสร้างวัตถุ BeautifulSoup ของหน้า html เพื่อให้ดึงข้อมูลได้ง่าย

ซุป = BeautifulSoup (หน้าเว็บ 'html.parser')
html = soup.prettify('utf-8')
property_json = {}
property_json['Details_Broad'] = {}
property_json['Address'] = {}

#แยกชื่อรายการทรัพย์สิน

สำหรับชื่อใน soup.findAll('title'):
properties_json['Title'] = title.text.strip()
หยุดพัก

สำหรับ meta ใน 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, สคริปต์) ในการแจกแจง (soup.findAll('script',
attrs={'type': 'application/ld+json'})):
ถ้าฉัน == 0:
json_data = json.loads (script.text)
property_json['Details_Broad']['จำนวนห้อง'] = json_data['numberOfRooms']
property_json['Details_Broad']['Floor Size (เป็น 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']['รหัสไปรษณีย์'] = json_data['address']['รหัสไปรษณีย์']
ถ้าฉัน == 1:
json_data = json.loads (script.text)
property_json['ราคาใน $'] = json_data['offers']['price']
property_json['Image'] = json_data['image'] ทรัพย์สิน
หยุดพัก

ด้วย open('data.json', 'w') เป็นไฟล์ outfile:
json.dump(property_json, outfile, เยื้อง=4)

ด้วย open('output_file.html', 'wb') เป็นไฟล์:
ไฟล์.write(html)

พิมพ์ ('———-การดึงข้อมูลเสร็จสมบูรณ์ ตรวจสอบไฟล์ json.———-')
[/รหัส]

ในการรันโค้ดที่ให้ไว้ด้านบน คุณจะต้องบันทึกมันในไฟล์ที่มีนามสกุล เช่น propertyScraper.py เมื่อเสร็จแล้วให้รันคำสั่งจากเทอร์มินัล –

[รหัสภาษา =”หลาม”]
หลามคุณสมบัติScraper.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 | ซิลโลว์”,
“Detail_Short”: “638 Grant Ave , North Baldwin, NY 11510-1332 เป็นบ้านเดี่ยวพร้อมขายในราคา $299,000 บ้าน 1,728 ตร.ฟุต มีขนาด 4 ห้องนอน 2.0 ห้องน้ำ ค้นหารูปภาพ 31 รูปของบ้าน 638 Grant Ave บน Zillow ดูรายละเอียดทรัพย์สิน ประวัติการขาย และข้อมูล Zestimate เพิ่มเติมบน Zillow MLS # 3137924”,
“ราคาเป็น $”: 299000,
“รูปภาพ”: “https://photos.zillowstatic.com/p_h/ISzz1p7wk4ktye1000000000.jpg”
}
[/รหัส]

[รหัสภาษา =”หลาม”]
{
“รายละเอียด_กว้าง”: {
“คำอธิบาย”: “บ้านเดี่ยวสามหลังที่ตั้งอยู่ในย่าน Brattle ของ Arlington ระหว่าง Arlington Heights และ Arlington Center บ้านหลังนี้สร้างขึ้นในปี ค.ศ. 1920 มีรายละเอียดของยุคสมัยที่สวยงาม พื้นไม้เนื้อแข็ง เพดานไม้เคร่า ห้องนั่งเล่นที่มีเตาผิงพร้อมห้องอาบแดดส่วนตัว ห้องรับประทานอาหารแบบเป็นทางการ ห้องนอนขนาดใหญ่ 3 ห้อง ห้องทำงาน และห้องอาบน้ำเต็ม 2 ห้อง ศักยภาพในการปรับปรุงคุณสมบัตินี้เพื่อขยายพื้นที่ใช้สอยและปรับแต่งให้เข้ากับรสนิยมส่วนตัวของคุณนั้นยอดเยี่ยมมาก ใกล้มินิทแมน คอมมิวเตอร์ ไบค์เวย์, Rt 77 และ 79 รถประจำทาง โรงเรียน แหล่งช้อปปิ้ง และร้านอาหาร การแสดงละครเสมือนจริงและภาพถ่ายการปรับปรุงเสมือนจริงที่จัดเตรียมไว้เพื่อช่วยให้คุณเห็นภาพ”,
“จำนวนห้อง”: 4,
“ขนาดพื้น (ตร.ฟุต)”: “2,224”
},
"ที่อยู่": {
“ถนน”: “10 วอลนัทเซนต์”,
“ท้องถิ่น”: “อาร์ลิงตัน”,
“ภูมิภาค”: “แมสซาชูเซตส์”,
“รหัสไปรษณีย์”: “02476”
},
“หัวข้อ”: “10 Walnut St, Arlington, MA 02476 | MLS #72515880 | ซิลโลว์”,
“Detail_Short”: “10 Walnut St , Arlington, MA 02476-6116 เป็นบ้านเดี่ยวพร้อมขายในราคา 725,000 ดอลลาร์ บ้านขนาด 2,224 ตร.ฟุต มีขนาด 4 ห้องนอน 2.0 ห้องน้ำ ค้นหารูปภาพ 34 รูปของบ้าน 10 Walnut St บน 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 | ซิลโลว์”,
“Detail_Short”: “638 Grant Ave , North Baldwin, NY 11510-1332 เป็นบ้านเดี่ยวพร้อมขายในราคา $299,000 บ้าน 1,728 ตร.ฟุต มีขนาด 4 ห้องนอน 2.0 ห้องน้ำ ค้นหารูปภาพ 31 รูปของบ้าน 638 Grant Ave บน Zillow ดูรายละเอียดทรัพย์สิน ประวัติการขาย และข้อมูล Zestimate เพิ่มเติมบน Zillow MLS # 3137924”,
“ราคาเป็น $”: 299000,
“รูปภาพ”: “https://photos.zillowstatic.com/p_h/ISzz1p7wk4ktye1000000000.jpg”
}
[/รหัส]

ขูดข้อมูลอสังหาริมทรัพย์ในขนาดใหญ่

การใช้โค้ดในลักษณะนี้ทำให้คุณสามารถรวบรวมข้อมูลรายละเอียดที่เกี่ยวข้องกับอสังหาริมทรัพย์บางประเภทเท่านั้น คุณสามารถตรวจสอบคุณสมบัติที่คุณสนใจได้ด้วยตนเองเป็นครั้งคราว อย่างไรก็ตาม หากคุณต้องการกำหนดเป้าหมายไปยังภูมิภาคใดภูมิภาคหนึ่งในสหรัฐอเมริกาหรือต่างประเทศ คุณจะต้องมีผู้ให้บริการขูดเว็บที่เชี่ยวชาญหรือเครื่องมือขูดข้อมูลเพื่อช่วยคุณรวบรวมรายชื่ออสังหาริมทรัพย์จากเว็บไซต์จำนวนมาก

PromptCloud ในฐานะผู้ให้บริการขูดเว็บชั้นนำเชื่อว่าโซลูชันการขูดเว็บควรไม่ยุ่งยากและควรมีเพียงสองขั้นตอนเท่านั้น ไคลเอ็นต์ให้ข้อกำหนดและรับข้อมูลที่ชัดเจน

นอกจากนี้ โปรดทราบว่าในบล็อกนี้ เราใช้ทั้งโปรแกรมรวบรวมข้อมูลและโปรแกรมขูด อย่าสับสนมากหรือน้อยทั้งสองอย่างเหมือนกัน แต่ถ้าคุณต้องการทราบข้อมูลเพิ่มเติม คุณสามารถตรวจสอบบล็อกของเราเกี่ยวกับการรวบรวมข้อมูลเว็บและการขูดข้อมูลเว็บ


ข้อจำกัดความรับผิดชอบ: รหัสที่มีอยู่ในบทช่วยสอนของเรามีไว้เพื่อการเรียนรู้เท่านั้น เราจะไม่รับผิดชอบต่อวิธีการใช้งาน และจะไม่มีความรับผิดจากฝ่ายของเราสำหรับผลกระทบใดๆ ของซอร์สโค้ด การมีอยู่ของรหัสนี้บนไซต์ของเราไม่ได้หมายความว่าเราส่งเสริมการขูดหรือ การรวบรวมข้อมูล เว็บไซต์ที่กล่าวถึงในบทความ จุดประสงค์เดียวของบทช่วยสอนนี้คือเพื่อแสดงเทคนิคในการเขียนเว็บแครปเปอร์สำหรับพอร์ทัลเว็บชั้นนำ อย่างไรก็ตาม เราไม่มีหน้าที่ต้องให้การสนับสนุนโค้ดใดๆ เราขอแนะนำให้คุณเพิ่มคำถามและข้อเสนอแนะของคุณในส่วนความคิดเห็น เพื่อให้เราสามารถตรวจสอบและตอบกลับในช่วงเวลาที่ กำหนด