Membuat Web Scraper Data Harga dari Situs Belanja Online dengan Python dan BeautifulSoup
Pelajari cara scraping data harga barang dari situs e-commerce Indonesia menggunakan Python, BeautifulSoup, dan Requests. Tutorial ini membahas etika scraping, langkah-langkah pengambilan data, dan penyimpanan ke CSV untuk analisis harga.
Kenapa Scraping Harga Itu Penting?
Pernah nggak kamu ingin membandingkan harga produk di beberapa toko online, tapi malas buka satu per satu? Atau mungkin kamu sedang riset untuk bisnis dropshipping dan butuh data harga kompetitor? Di sinilah web scraping bisa jadi solusinya — asal dilakukan dengan etis.
Tutorial ini akan membantumu membuat web scraper sederhana menggunakan Python untuk mengambil data harga produk dari situs belanja online. Tapi ingat, scraping itu seperti pisau: berguna kalau dipakai benar, berbahaya kalau disalahgunakan. Kita akan fokus pada penggunaan pribadi dan tidak melanggar aturan.
Persiapan Awal
Sebelum mulai, pastikan kamu sudah menginstal Python 3.x di komputer. Kita juga perlu beberapa pustaka:
requests: untuk mengambil halaman webbeautifulsoup4: untuk parsing HTMLlxml: parser yang lebih cepat (opsional)
Instal dengan perintah:
pip install requests beautifulsoup4 lxml
Etika Scraping yang Wajib Kamu Tahu
Scraping bisa membebani server situs target. Ikuti prinsip ini:
- Baca
robots.txt— file yang memberi tahu scraper mana yang diizinkan. Contoh:https://www.tokopedia.com/robots.txt - Beri jeda antar request — gunakan
time.sleep(1)agar server tidak kewalahan. - Gunakan User-Agent — jangan pakai default Python; tirulah browser asli.
- Hormati kebijakan situs — jangan scraping data yang dilindungi login atau bersifat pribadi.
- Gunakan API jika tersedia — lebih resmi dan stabil.
Untuk tutorial ini, kita akan mengambil data dari situs dummy atau halaman publik yang mengizinkan scraping. Kamu bisa menyesuaikan dengan situs lokal seperti Tokopedia atau Bukalapak, tapi pastikan tidak melanggar ketentuan mereka.
Langkah 1: Memahami Struktur Halaman
Buka halaman produk di browser, lalu klik kanan > Inspect Element. Cari elemen yang berisi nama produk dan harga. Biasanya ada di tag <div> dengan class tertentu. Misalnya, di Tokopedia class css-1kr22w3 untuk harga (tapi itu bisa berubah). Kita akan pakai contoh sederhana dengan struktur seperti ini:
<div class="product">
<h2 class="product-title">Produk A</h2>
<span class="price">Rp 100.000</span>
</div>
Langkah 2: Tulis Kode Scraper
Buat file scraper.py dan tulis kode berikut:
import requests
from bs4 import BeautifulSoup
import time
import csv
# Ganti URL dengan halaman yang ingin discrape
URL = "https://example-toko-online.com/produk"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
def scrape_page(url):
response = requests.get(url, headers=headers)
if response.status_code != 200:
print(f"Gagal mengakses {url}, status code: {response.status_code}")
return []
soup = BeautifulSoup(response.text, "lxml")
products = soup.find_all("div", class_="product")
data = []
for product in products:
name_elem = product.find("h2", class_="product-title")
price_elem = product.find("span", class_="price")
if name_elem and price_elem:
name = name_elem.get_text(strip=True)
price = price_elem.get_text(strip=True)
data.append([name, price])
return data
if __name__ == "__main__":
all_data = scrape_page(URL)
print(f"Mendapatkan {len(all_data)} produk")
# Simpan ke CSV
with open("data_harga.csv", "w", newline="", encoding="utf-8") as file:
writer = csv.writer(file)
writer.writerow(["Nama Produk", "Harga"])
writer.writerows(all_data)
print("Data disimpan ke data_harga.csv")
Langkah 3: Menangani Halaman dengan Banyak Produk (Pagination)
Banyak toko online punya beberapa halaman hasil pencarian. Untuk mengambil semua produk, kita perlu mengikuti link "Next". Tambahkan loop:
def scrape_all_pages(base_url, max_pages=5):
all_data = []
for page_num in range(1, max_pages+1):
url = f"{base_url}?page={page_num}"
print(f"Scraping halaman {page_num}...")
data = scrape_page(url)
all_data.extend(data)
time.sleep(1) # Jeda agar tidak diblokir
return all_data
Langkah 4: Membersihkan Data Harga
Harga sering dalam format "Rp 100.000" yang perlu diubah ke angka untuk analisis. Kamu bisa gunakan regex:
import re
def clean_price(price_text):
# Hapus 'Rp' dan titik, lalu konversi ke integer
cleaned = re.sub(r'[^\d]', '', price_text)
return int(cleaned) if cleaned else 0
Contoh Penggunaan untuk Analisis Sederhana
Setelah data terkumpul, kamu bisa menganalisisnya dengan pandas:
import pandas as pd
df = pd.read_csv("data_harga.csv")
df['Harga Bersih'] = df['Harga'].apply(clean_price)
print(df.describe())
print("Produk termurah:", df.loc[df['Harga Bersih'].idxmin()])
Tantangan yang Mungkin Kamu Hadapi
- Struktur halaman berubah — class CSS bisa berganti; kamu perlu update selektor.
- Rate limiting — server bisa memblokir IP jika terlalu banyak request. Gunakan proxy atau jeda lebih lama.
- Dynamic content — beberapa situs menggunakan JavaScript untuk memuat harga. Solusinya: gunakan Selenium atau Playwright, tapi itu di luar tutorial ini.
Alternatif: Pakai API Resmi
Beberapa platform seperti Tokopedia menyediakan API untuk merchant resmi. Jika kamu serius, lebih baik daftar sebagai developer dan gunakan API resmi. Lebih stabil dan legal.
Kesimpulan
Web scraping adalah skill yang powerful untuk mengumpulkan data publik, termasuk harga produk. Dengan Python dan BeautifulSoup, kamu bisa membuat scraper sendiri dalam waktu singkat. Tapi ingat: gunakan dengan bijak, hormati aturan situs, dan jangan pernah scraping data pribadi atau yang dilindungi.
Sekarang, coba praktikkan sendiri! Ambil produk favoritmu, bandingkan harga, dan buat keputusan belanja yang lebih cerdas. Selamat mencoba!