Skip to content

EgiStr/nilaigizi.com-scraper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

3 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Nilaigizi.com Nutrition Data Scraper

Sistem web scraping otomatis untuk mengekstrak data nilai gizi dari nilaigizi.com.

🎯 Version 1.1 - Updated Parsing Logic

✨ Baru! Logika parsing yang lebih akurat berdasarkan struktur HTML aktual dari nilaigizi.com

πŸ“‹ Fitur

  • Two-Phase Scraping: Crawling URLs kemudian ekstraksi data detail
  • Accurate HTML Parsing: Ekstraksi data dari tabel HTML menggunakan BeautifulSoup
  • CSV Export: Output data dalam format CSV yang mudah dianalisis
  • Rate Limiting: Penundaan otomatis untuk menghindari overload server
  • Error Handling: Penanganan error yang robust untuk koneksi dan parsing
  • Tested & Validated: Sudah ditest dengan data real dari website

πŸ“Š Data yang Diambil

Untuk setiap produk, scraper mengekstrak:

  • Nama Produk
  • URL Produk
  • Energi (kkal)
  • Protein (g)
  • Karbohidrat Total (g)
  • Lemak Total (g)

πŸ› οΈ Teknologi

  • Python 3.x
  • requests - HTTP client
  • BeautifulSoup4 - HTML parsing
  • pandas - Data manipulation & CSV export
  • re - Regular expressions untuk text extraction

πŸ“ Struktur Proyek

nilaigizi/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ scraper.py       # Main scraping logic
β”‚   └── config.py        # Configuration settings
β”œβ”€β”€ data/                # Output CSV files
β”‚   └── .gitkeep
β”œβ”€β”€ requirements.txt     # Python dependencies
β”œβ”€β”€ README.md           # Dokumentasi
└── .gitignore          # Git ignore rules

πŸš€ Instalasi

1. Clone atau Download Repository

cd /path/to/nilaigizi

2. Buat Virtual Environment (Opsional tapi Disarankan)

python -m venv venv

# Aktivasi virtual environment
# Linux/Mac:
source venv/bin/activate

# Windows:
venv\Scripts\activate

3. Install Dependencies

pip install -r requirements.txt

πŸ’» Cara Penggunaan

Basic Usage

python -m src.scraper

Kustomisasi

Edit file src/config.py untuk mengubah pengaturan:

# Jumlah halaman yang akan di-scrape
TOTAL_PAGES = 5  # Ubah ke 149 untuk full scrape

# Lokasi output file
OUTPUT_FILENAME = "data/data_nilai_gizi.csv"

# Delay antara request (detik)
MIN_DELAY = 0.5
MAX_DELAY = 1.5

Penggunaan Programmatic

from src.scraper import NilaigizScraper

# Initialize scraper
scraper = NilaigizScraper(max_pages=10)

# Run full pipeline
scraper.run()

# Atau jalankan step-by-step
urls = scraper.get_product_urls()
data = scraper.scrape_product_details(urls)
scraper.save_to_csv("custom_output.csv")

πŸ“ˆ Optimasi Performa

Rekomendasi untuk Full Scrape (149 halaman)

Jika ingin scrape semua data:

  1. Ubah TOTAL_PAGES di config.py menjadi 149
  2. Pertimbangkan optimasi:
    • Data gizi sudah tersedia di halaman pencarian (list view)
    • Ekstrak langsung dari list view untuk menghindari 3000+ requests
    • Total request: 149 (list pages) vs 149 + ~3000 (detail pages)

Estimasi Waktu

  • 5 halaman (default): ~2-5 menit
  • 149 halaman (crawl only): ~2-3 jam
  • 149 halaman + detail pages: ~10-15 jam

⚠️ Catatan Penting

Legal & Ethical Considerations

  • βœ… Gunakan untuk tujuan penelitian atau personal
  • βœ… Respect robots.txt dari website
  • βœ… Rate limiting sudah diimplementasikan
  • ❌ Jangan overload server target
  • ❌ Jangan untuk tujuan komersial tanpa izin

Error Handling

Jika menemukan error:

  1. Connection Error: Periksa koneksi internet
  2. HTTP 403/429: Server memblokir request, tingkatkan delay
  3. Parsing Error: Struktur HTML website mungkin berubah
  4. Empty Data: Verifikasi selector CSS di scraper.py

πŸ”§ Troubleshooting

Data kosong atau tidak lengkap?

  1. Jalankan test parser terlebih dahulu:

    python test_parser.py

    Ini akan memvalidasi logika parsing dengan sample HTML

  2. Buka URL di browser dan periksa HTML structure

  3. Update selector CSS di method scrape_product_details() jika struktur berubah

  4. Verifikasi selector di src/scraper.py:

    • Nama produk: span.h5
    • Tabel gizi: tbody.f11

Request ditolak server?

  1. Tingkatkan MIN_DELAY dan MAX_DELAY di src/config.py
  2. Update User-Agent header di config
  3. Gunakan proxy atau VPN

Testing Parsing Logic

Untuk memverifikasi parsing bekerja dengan benar:

# Run test dengan sample HTML
python test_parser.py

# Expected output:
# βœ“ Nama Produk: Adem sari herbal lemon
# βœ“ Energi: 60.0 kkal
# βœ“ Protein: 0.0 g
# βœ“ Karbohidrat: 16.0 g
# βœ“ Lemak: 0.0 g
# πŸŽ‰ SEMUA TEST PASSED!

πŸ“ Contoh Output

File CSV yang dihasilkan:

Nama Produk URL Energi Protein Karbohidrat Lemak
Apel Merah https://... 52.00 0.30 13.80 0.20
Nasi Putih https://... 130.00 2.70 28.20 0.30

🀝 Kontribusi

Contributions are welcome! Silakan buat pull request atau buka issue untuk bug reports dan feature requests.

πŸ“„ License

This project is provided as-is for educational purposes.

πŸ”— Resources


Disclaimer: Proyek ini dibuat untuk tujuan edukasi. Pastikan untuk mematuhi Terms of Service dari website target.

About

Sistem web scraping otomatis untuk mengekstrak data nilai gizi dari [nilaigizi.com](https://nilaigizi.com).

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages