Thursday

19-06-2025 Vol 19

Scraping Kenya’s Rental Market: A Real-World Web Scraping Project with Python

Scraping Pasar Sewa Kenya: Proyek Web Scraping Dunia Nyata dengan Python

Pasar sewa di Kenya, seperti banyak pasar properti lainnya di seluruh dunia, merupakan lanskap dinamis dengan fluktuasi harga, ketersediaan properti, dan preferensi lokasi yang terus berubah. Untuk memahami tren ini, mendapatkan keunggulan kompetitif, atau sekadar menemukan penawaran sewa terbaik, data adalah kunci. Web scraping, teknik otomatisasi untuk mengekstrak data dari situs web, menawarkan solusi yang kuat untuk mengumpulkan informasi ini secara sistematis. Artikel ini akan memandu Anda melalui proyek web scraping dunia nyata yang berfokus pada pasar sewa Kenya menggunakan Python. Kami akan membahas langkah-langkah, tantangan, dan praktik terbaik untuk membangun scraper yang efektif dan bertanggung jawab.

Mengapa Melakukan Scraping Pasar Sewa?

Sebelum kita masuk ke detail teknis, mari kita pahami mengapa web scraping pasar sewa bisa begitu berharga:

  • Analisis Pasar: Memahami tren harga, ketersediaan properti berdasarkan lokasi, jenis properti, dan fasilitas.
  • Keunggulan Kompetitif: Memungkinkan agen properti dan pengembang untuk memantau harga pesaing, mengidentifikasi peluang baru, dan menyesuaikan strategi mereka.
  • Pencarian Properti yang Efisien: Memungkinkan penyewa untuk mencari properti yang memenuhi kriteria spesifik mereka secara lebih efisien daripada menelusuri ratusan daftar secara manual.
  • Identifikasi Peluang Investasi: Membantu investor mengidentifikasi area dengan potensi pertumbuhan sewa yang tinggi.
  • Data-Driven Decision Making: Menyediakan data objektif untuk pengambilan keputusan yang lebih baik di semua aspek pasar sewa.

Kerangka Proyek

Proyek ini akan dibagi menjadi beberapa bagian utama:

  1. Perencanaan dan Penentuan Tujuan: Mendefinisikan ruang lingkup proyek, situs web target, dan data yang ingin diekstrak.
  2. Pengaturan Lingkungan Pengembangan: Menginstal Python dan pustaka yang diperlukan.
  3. Memeriksa Situs Web Target: Memahami struktur HTML situs web target.
  4. Menulis Kode Scraper: Mengembangkan kode Python untuk mengunduh halaman web dan mengekstrak data.
  5. Membersihkan dan Menyimpan Data: Membersihkan data yang diekstrak dan menyimpannya dalam format yang berguna.
  6. Analisis Data dan Visualisasi: (Opsional) Menganalisis dan memvisualisasikan data untuk mendapatkan wawasan.
  7. Etika Scraping dan Praktik Terbaik: Memastikan scraper beroperasi secara etis dan bertanggung jawab.

1. Perencanaan dan Penentuan Tujuan

Langkah pertama adalah menentukan dengan tepat apa yang ingin Anda capai dengan proyek web scraping Anda. Ini melibatkan:

  • Mengidentifikasi Situs Web Target: Pilih situs web yang memiliki daftar properti sewa yang relevan di Kenya. Beberapa contoh potensial termasuk:
    • Property24 Kenya
    • BuyRentKenya
    • Jumia House Kenya
    • PigiaMe

    Pertimbangkan cakupan, struktur, dan kecepatan muat situs web saat membuat pilihan Anda.

  • Menentukan Data yang Akan Diekstrak: Tentukan informasi spesifik yang ingin Anda kumpulkan untuk setiap listing properti. Contohnya meliputi:
    • Judul listing
    • Harga sewa
    • Lokasi (kota, lingkungan)
    • Jenis properti (apartemen, rumah, dll.)
    • Jumlah kamar tidur dan kamar mandi
    • Ukuran properti (meter persegi)
    • Deskripsi
    • Fasilitas (parkir, balkon, keamanan, dll.)
    • URL Gambar
    • URL listing
  • Menentukan Frekuensi Scraping: Putuskan seberapa sering Anda perlu memperbarui data Anda. Pasar sewa bersifat dinamis, jadi Anda mungkin perlu melakukan scraping secara berkala (misalnya, setiap hari atau setiap minggu) untuk menjaga data Anda tetap terkini.
  • Mempertimbangkan Batasan Hukum dan Etika: Pastikan web scraping diizinkan oleh syarat dan ketentuan situs web target. Hindari membebani server situs web dengan terlalu banyak permintaan dalam waktu singkat.

2. Pengaturan Lingkungan Pengembangan

Sebelum Anda mulai menulis kode, Anda perlu menyiapkan lingkungan pengembangan Anda. Ini melibatkan:

  • Menginstal Python: Jika Anda belum memiliki Python, unduh dan instal versi terbaru dari situs web resmi Python.
  • Menginstal pip: Pip adalah pengelola paket untuk Python. Ini biasanya diinstal dengan Python. Untuk memverifikasi, buka command prompt atau terminal dan jalankan: pip --version. Jika pip tidak diinstal, ikuti petunjuk di situs web pip.
  • Menginstal Pustaka yang Diperlukan: Gunakan pip untuk menginstal pustaka yang diperlukan untuk web scraping:
    • requests: Untuk mengunduh halaman web. Jalankan: pip install requests
    • Beautiful Soup 4: Untuk mem-parsing HTML. Jalankan: pip install beautifulsoup4
    • pandas: Untuk menyimpan dan memanipulasi data. Jalankan: pip install pandas
  • Menggunakan Lingkungan Virtual (Direkomendasikan): Lingkungan virtual membantu Anda mengisolasi dependensi proyek Anda. Untuk membuatnya:
    1. python -m venv myenv (ganti “myenv” dengan nama lingkungan Anda)
    2. Aktifkan lingkungan:
      • Windows: myenv\Scripts\activate
      • macOS/Linux: source myenv/bin/activate

3. Memeriksa Situs Web Target

Memahami struktur HTML situs web target sangat penting untuk menulis scraper yang efektif. Gunakan alat pengembang browser Anda (biasanya dapat diakses dengan menekan F12) untuk memeriksa kode HTML halaman web yang berisi daftar properti sewa. Perhatikan hal-hal berikut:

  • Struktur Umum HTML: Bagaimana daftar diatur? Apakah mereka berada dalam div, tabel, atau daftar?
  • Kelas CSS dan ID: Kelas CSS dan ID apa yang digunakan untuk menandai elemen yang berisi data yang ingin Anda ekstrak (misalnya, harga, lokasi, deskripsi)?
  • Pola URL: Bagaimana URL untuk setiap listing dibuat? Apakah ada pola yang dapat Anda gunakan untuk menghasilkan URL untuk semua daftar?
  • Implementasi Paginasi: Bagaimana daftar di halaman web dibagi menjadi beberapa halaman? Bagaimana Anda menavigasi ke halaman berikutnya?

Misalnya, jika Anda menggunakan Chrome, klik kanan pada elemen yang ingin Anda ekstrak (misalnya, harga sewa) dan pilih “Inspect”. Ini akan membuka alat pengembang dan menyorot elemen di kode HTML. Perhatikan kelas CSS atau ID yang terkait dengan elemen tersebut. Anda akan menggunakan informasi ini dalam kode scraper Anda.

4. Menulis Kode Scraper

Sekarang, mari kita tulis kode Python untuk mengunduh halaman web dan mengekstrak data. Berikut adalah contoh kode dasar yang mengilustrasikan prinsip-prinsipnya. Perlu diingat bahwa kode ini perlu disesuaikan agar sesuai dengan struktur HTML situs web target Anda.

“`python
import requests
from bs4 import BeautifulSoup
import pandas as pd

# Fungsi untuk melakukan scraping satu halaman web
def scrape_page(url):
try:
response = requests.get(url)
response.raise_for_status() # Mengangkat exception untuk status HTTP yang buruk
except requests.exceptions.RequestException as e:
print(f”Error fetching URL {url}: {e}”)
return []

soup = BeautifulSoup(response.content, ‘html.parser’)

# Temukan semua listing properti. Perhatikan bahwa kelas CSS ini harus
# disesuaikan agar sesuai dengan situs web target Anda.
property_listings = soup.find_all(‘div’, class_=’property-listing’) # Ganti dengan kelas yang sesuai

data = []
for listing in property_listings:
try:
# Ekstrak data dari setiap listing. Sekali lagi, kelas CSS ini harus
# disesuaikan agar sesuai dengan situs web target Anda.
title = listing.find(‘h2′, class_=’property-title’).text.strip() # Ganti dengan kelas yang sesuai
price = listing.find(‘span’, class_=’property-price’).text.strip() # Ganti dengan kelas yang sesuai
location = listing.find(‘span’, class_=’property-location’).text.strip() # Ganti dengan kelas yang sesuai
link = listing.find(‘a’, class_=’property-link’)[‘href’] # Ganti dengan kelas yang sesuai

data.append({
‘Title’: title,
‘Price’: price,
‘Location’: location,
‘Link’: link
})
except AttributeError as e:
print(f”Error extracting data from listing: {e}”)
continue # Lanjutkan ke listing berikutnya jika terjadi kesalahan

return data

# Fungsi untuk melakukan scraping beberapa halaman (paginasi)
def scrape_multiple_pages(base_url, num_pages):
all_data = []
for page_num in range(1, num_pages + 1):
url = f”{base_url}?page={page_num}” # Sesuaikan URL paginasi sesuai kebutuhan
print(f”Scraping page: {url}”)
page_data = scrape_page(url)
all_data.extend(page_data)
return all_data

# URL dasar untuk situs web target. Ganti dengan URL yang sesuai.
base_url = “https://www.example.com/rental-properties” #Ganti dengan URL yang sesuai
num_pages = 5 # Jumlah halaman yang akan di-scrape

# Lakukan scraping semua halaman
all_rental_data = scrape_multiple_pages(base_url, num_pages)

# Konversikan data menjadi DataFrame pandas
df = pd.DataFrame(all_rental_data)

# Cetak beberapa baris pertama dari DataFrame
print(df.head())

# Simpan data ke file CSV
df.to_csv(‘kenya_rental_data.csv’, index=False)

print(“Data saved to kenya_rental_data.csv”)
“`

Penjelasan Kode:

  1. Impor Pustaka: Mengimpor pustaka `requests`, `BeautifulSoup`, dan `pandas`.
  2. Fungsi `scrape_page(url)`:
    • Mengambil konten halaman web menggunakan `requests.get(url)`.
    • Menggunakan `BeautifulSoup` untuk mem-parsing HTML.
    • Menggunakan metode `find_all()` untuk menemukan semua elemen yang berisi daftar properti. Kelas CSS yang digunakan di sini (`’property-listing’`) harus disesuaikan agar sesuai dengan situs web target Anda.
    • Iterasi melalui setiap daftar dan mengekstrak data yang diinginkan (judul, harga, lokasi, tautan) menggunakan metode `find()` dan mengakses teks menggunakan `.text.strip()`. Sekali lagi, kelas CSS yang digunakan di sini harus disesuaikan agar sesuai dengan situs web target Anda.
    • Menangani potensi `AttributeError` jika elemen tertentu tidak ditemukan dalam daftar.
    • Mengembalikan daftar kamus, dengan setiap kamus mewakili satu daftar properti.
  3. Fungsi `scrape_multiple_pages(base_url, num_pages)`:
    • Mengambil URL dasar dan jumlah halaman yang akan di-scrape.
    • Iterasi melalui setiap halaman, membuat URL lengkap untuk halaman tersebut. Perhatikan bahwa format URL paginasi (`f”{base_url}?page={page_num}”`) harus disesuaikan agar sesuai dengan situs web target Anda.
    • Memanggil fungsi `scrape_page()` untuk melakukan scraping setiap halaman.
    • Menggabungkan data dari semua halaman ke dalam satu daftar.
    • Mengembalikan daftar semua data.
  4. Kode Utama:
    • Mendefinisikan URL dasar dan jumlah halaman yang akan di-scrape.
    • Memanggil fungsi `scrape_multiple_pages()` untuk melakukan scraping semua halaman.
    • Membuat DataFrame pandas dari data yang di-scrape.
    • Mencetak beberapa baris pertama dari DataFrame untuk memverifikasi bahwa data telah di-scrape dengan benar.
    • Menyimpan data ke file CSV.

Penting: Ingatlah untuk mengganti kelas CSS dan format URL yang sesuai dengan struktur HTML situs web target Anda.

5. Membersihkan dan Menyimpan Data

Data yang Anda ekstrak dari situs web mungkin tidak selalu bersih dan siap untuk dianalisis. Anda mungkin perlu melakukan beberapa langkah pembersihan dan transformasi data. Ini mungkin termasuk:

  • Menghapus Karakter yang Tidak Diinginkan: Menghapus karakter seperti simbol mata uang, koma, dan spasi putih yang tidak perlu dari harga sewa dan bidang numerik lainnya.
  • Mengonversi Tipe Data: Mengonversi bidang yang diekstrak ke tipe data yang benar (misalnya, mengonversi harga sewa menjadi angka, dan tanggal menjadi format tanggal).
  • Menangani Nilai yang Hilang: Mengisi nilai yang hilang dengan nilai yang sesuai (misalnya, menggunakan mean atau median untuk mengganti harga sewa yang hilang).
  • Standardisasi Data: Menyeragamkan format data (misalnya, memastikan bahwa semua lokasi menggunakan format yang sama).

Berikut adalah contoh kode untuk membersihkan data:

“`python
import pandas as pd

# Baca data dari file CSV
df = pd.read_csv(‘kenya_rental_data.csv’)

# Fungsi untuk membersihkan harga
def clean_price(price):
# Hapus simbol mata uang dan koma
price = price.replace(‘KSh’, ”).replace(‘,’, ”).strip()
try:
# Konversikan ke integer
return int(price)
except ValueError:
return None # Kembalikan None jika tidak dapat dikonversi

# Terapkan fungsi pembersihan harga ke kolom ‘Price’
df[‘Price’] = df[‘Price’].apply(clean_price)

# Hapus baris dengan harga yang hilang
df = df.dropna(subset=[‘Price’])

# Cetak beberapa baris pertama dari DataFrame yang dibersihkan
print(df.head())

# Simpan data yang dibersihkan ke file CSV baru
df.to_csv(‘kenya_rental_data_cleaned.csv’, index=False)

print(“Cleaned data saved to kenya_rental_data_cleaned.csv”)
“`

Penjelasan Kode:

  1. Baca Data: Membaca data dari file CSV menggunakan `pd.read_csv()`.
  2. Fungsi `clean_price(price)`:
    • Mengambil harga sebagai input.
    • Menghapus simbol mata uang (“KSh”) dan koma dari string harga.
    • Mencoba mengonversi string harga menjadi integer menggunakan `int()`.
    • Jika konversi gagal (misalnya, jika string harga berisi karakter yang tidak valid), mengembalikan `None`.
  3. Terapkan Fungsi Pembersihan: Menerapkan fungsi `clean_price()` ke kolom “Price” menggunakan metode `apply()`. Ini akan membersihkan harga di setiap baris DataFrame.
  4. Hapus Nilai yang Hilang: Menghapus baris yang memiliki nilai yang hilang (None) di kolom “Price” menggunakan metode `dropna()`. Ini memastikan bahwa Anda hanya bekerja dengan data yang valid.
  5. Simpan Data yang Dibersihkan: Menyimpan data yang dibersihkan ke file CSV baru menggunakan `df.to_csv()`.

6. Analisis Data dan Visualisasi (Opsional)

Setelah Anda membersihkan data Anda, Anda dapat menganalisis dan memvisualisasikannya untuk mendapatkan wawasan tentang pasar sewa Kenya. Beberapa contoh analisis yang dapat Anda lakukan termasuk:

  • Harga Rata-Rata Sewa berdasarkan Lokasi: Menghitung harga sewa rata-rata untuk berbagai kota atau lingkungan.
  • Distribusi Harga Sewa: Membuat histogram atau box plot untuk memvisualisasikan distribusi harga sewa.
  • Korelasi antara Ukuran Properti dan Harga Sewa: Menentukan apakah ada korelasi antara ukuran properti (meter persegi) dan harga sewa.
  • Tren Harga Sewa dari Waktu ke Waktu: Jika Anda mengumpulkan data secara berkala, Anda dapat menganalisis bagaimana harga sewa berubah dari waktu ke waktu.

Anda dapat menggunakan pustaka Python seperti `matplotlib` dan `seaborn` untuk memvisualisasikan data Anda. Berikut adalah contoh sederhana:

“`python
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# Baca data yang dibersihkan dari file CSV
df = pd.read_csv(‘kenya_rental_data_cleaned.csv’)

# Hitung harga sewa rata-rata berdasarkan lokasi
average_price_by_location = df.groupby(‘Location’)[‘Price’].mean().sort_values(ascending=False)

# Buat bar plot
plt.figure(figsize=(12, 6))
sns.barplot(x=average_price_by_location.index, y=average_price_by_location.values)
plt.xlabel(‘Location’)
plt.ylabel(‘Average Rental Price (KSh)’)
plt.title(‘Average Rental Price by Location in Kenya’)
plt.xticks(rotation=45, ha=’right’)
plt.tight_layout()
plt.show()
“`

Penjelasan Kode:

  1. Impor Pustaka: Mengimpor pustaka `pandas`, `matplotlib.pyplot`, dan `seaborn`.
  2. Baca Data: Membaca data yang dibersihkan dari file CSV menggunakan `pd.read_csv()`.
  3. Hitung Harga Rata-Rata: Menggunakan metode `groupby()` untuk mengelompokkan data berdasarkan lokasi dan kemudian menghitung harga sewa rata-rata untuk setiap lokasi menggunakan metode `mean()`. Metode `sort_values()` digunakan untuk mengurutkan lokasi berdasarkan harga sewa rata-rata dalam urutan menurun.
  4. Buat Bar Plot:
    • Membuat objek `figure` dan `axes` menggunakan `plt.figure()` untuk mengontrol ukuran plot.
    • Menggunakan fungsi `sns.barplot()` dari `seaborn` untuk membuat bar plot.
      • `x`: Menentukan lokasi (indeks `average_price_by_location`).
      • `y`: Menentukan harga sewa rata-rata (nilai `average_price_by_location`).
    • Menambahkan label ke sumbu x dan y menggunakan `plt.xlabel()` dan `plt.ylabel()`.
    • Menambahkan judul ke plot menggunakan `plt.title()`.
    • Memutar label pada sumbu x untuk meningkatkan keterbacaan menggunakan `plt.xticks(rotation=45, ha=’right’)`.
    • Menyesuaikan tata letak plot untuk mencegah label tumpang tindih menggunakan `plt.tight_layout()`.
    • Menampilkan plot menggunakan `plt.show()`.

7. Etika Scraping dan Praktik Terbaik

Web scraping dapat menjadi alat yang ampuh, tetapi penting untuk menggunakannya secara etis dan bertanggung jawab. Berikut adalah beberapa praktik terbaik yang harus diikuti:

  • Periksa File `robots.txt`: File `robots.txt` adalah file teks yang terletak di direktori root situs web yang berisi instruksi untuk bot web. File ini menentukan bagian mana dari situs web yang boleh atau tidak boleh di-scrape. Hormati aturan yang ditetapkan dalam file `robots.txt`. Anda dapat menemukan file `robots.txt` dengan menambahkan `/robots.txt` ke URL dasar situs web (misalnya, `https://www.example.com/robots.txt`).
  • Hormati Syarat dan Ketentuan Situs Web: Baca syarat dan ketentuan situs web untuk melihat apakah web scraping diizinkan. Beberapa situs web secara eksplisit melarang web scraping.
  • Gunakan `User-Agent` yang Sesuai: Setel header `User-Agent` di permintaan HTTP Anda untuk mengidentifikasi scraper Anda. Ini membantu situs web mengidentifikasi lalu lintas dari scraper Anda dan memantau penggunaan.
  • Batasi Kecepatan Permintaan: Jangan membebani server situs web dengan terlalu banyak permintaan dalam waktu singkat. Terapkan penundaan di antara permintaan untuk menghindari pembebanan server. Teknik ini disebut request throttling atau rate limiting.
  • Tangani Kesalahan dengan Benar: Implementasikan penanganan kesalahan untuk menangani kesalahan seperti koneksi yang gagal, kesalahan server, dan kesalahan HTML. Ini akan membantu mencegah scraper Anda dari crash dan kehilangan data.
  • Simpan Data secara Bertanggung Jawab: Simpan data yang Anda kumpulkan dengan aman dan gunakan secara bertanggung jawab. Patuhi semua hukum dan peraturan yang relevan terkait privasi dan perlindungan data.
  • Hindari Scraping Data Pribadi: Hindari scraping data pribadi seperti alamat email, nomor telepon, dan nama kecuali Anda memiliki izin eksplisit untuk melakukannya.
  • Pertimbangkan Penggunaan API: Jika situs web menyediakan API, gunakan API daripada melakukan web scraping. API biasanya merupakan cara yang lebih stabil dan efisien untuk mengakses data.
  • Pantau Scraper Anda: Pantau scraper Anda secara berkala untuk memastikan bahwa scraper tersebut berfungsi dengan benar dan tidak menyebabkan masalah apa pun di situs web target.

Contoh Penerapan Rate Limiting:

“`python
import requests
import time
from bs4 import BeautifulSoup

def scrape_with_rate_limiting(url, delay=1): # Delay dalam detik
try:
response = requests.get(url)
response.raise_for_status()
time.sleep(delay) # Menunggu sebelum permintaan berikutnya
soup = BeautifulSoup(response.content, ‘html.parser’)
# Lakukan scraping
return soup
except requests.exceptions.RequestException as e:
print(f”Error fetching {url}: {e}”)
return None
“`

Dalam contoh ini, fungsi `time.sleep(delay)` digunakan untuk menambahkan penundaan antara permintaan.

Kesimpulan

Web scraping pasar sewa Kenya menggunakan Python adalah proyek yang menantang namun bermanfaat yang dapat memberikan wawasan berharga tentang tren pasar properti. Dengan mengikuti langkah-langkah dan praktik terbaik yang diuraikan dalam artikel ini, Anda dapat membangun scraper yang efektif dan bertanggung jawab yang dapat membantu Anda membuat keputusan yang lebih baik, mendapatkan keunggulan kompetitif, dan menemukan penawaran sewa terbaik.

Ingatlah untuk selalu menghormati syarat dan ketentuan situs web target, membatasi kecepatan permintaan Anda, dan menggunakan data yang Anda kumpulkan secara etis dan bertanggung jawab.

Langkah Selanjutnya

Setelah Anda membangun scraper dasar, Anda dapat memperluasnya dengan menambahkan fitur-fitur berikut:

  • Scraping Data Tambahan: Ekstrak lebih banyak data dari setiap listing, seperti detail fasilitas, skor berjalan kaki, dan informasi tentang sekolah terdekat.
  • Pemantauan Perubahan Harga: Implementasikan sistem untuk memantau perubahan harga sewa dari waktu ke waktu.
  • Notifikasi Otomatis: Kirim notifikasi otomatis ketika daftar baru yang memenuhi kriteria spesifik Anda ditambahkan.
  • Penyebaran Scraper: Sebarkan scraper Anda ke server cloud untuk menjalankannya secara otomatis dan terus menerus.
  • Penggunaan Proxy: Gunakan proxy untuk menghindari pemblokiran IP saat scraping skala besar.

Dengan terus meningkatkan dan menyempurnakan scraper Anda, Anda dapat membuka wawasan yang lebih dalam dan mendapatkan keunggulan kompetitif yang signifikan di pasar sewa Kenya.

“`

omcoding

Leave a Reply

Your email address will not be published. Required fields are marked *