Skip to main content

Library Python untuk scraping website Indonesia dengan mudah

Project description

Indo Scraper ๐Ÿ‡ฎ๐Ÿ‡ฉ

Library Python untuk scraping website Indonesia dengan mudah dan aman. Dirancang khusus untuk domain Indonesia seperti .id, .co.id, .go.id, .sch.id, dan domain Indonesia lainnya.

๐Ÿš€ Fitur Utama

  • โœ… Mudah digunakan - Cukup satu baris kode untuk scraping
  • โœ… Domain Indonesia - Dioptimalkan untuk website Indonesia
  • โœ… Ekstraksi otomatis - Email, telepon, alamat, dan kontak lainnya
  • โœ… Multiple pages - Scraping beberapa halaman sekaligus
  • โœ… Export JSON - Simpan hasil ke file JSON
  • โœ… Command Line - Bisa digunakan dari terminal
  • โœ… Rate limiting - Menghormati server dengan delay otomatis

๐Ÿ“ฆ Instalasi

pip install indo-scraper

๐Ÿ”ง Cara Penggunaan

1. Penggunaan Dasar

from indo_scraper import IndoScraper

# Buat instance scraper
scraper = IndoScraper()

# Scraping website
hasil = scraper.scrape("https://www.smkn5bandung.sch.id/")

# Lihat hasil
print(f"Judul: {hasil['title']}")
print(f"Email ditemukan: {hasil['contact_info']['emails']}")
print(f"Telepon: {hasil['contact_info']['phones']}")

2. Scraping dengan Opsi Lengkap

from indo_scraper import IndoScraper

scraper = IndoScraper(delay=2.0, timeout=60)

hasil = scraper.scrape(
    url="https://www.kemendikbud.go.id/",
    extract_links=True,      # Ekstrak semua link
    extract_images=True,     # Ekstrak semua gambar
    extract_contact=True,    # Ekstrak informasi kontak
    max_pages=3             # Scraping maksimal 3 halaman
)

# Simpan hasil ke JSON
scraper.save_to_json(hasil, "hasil_scraping.json")

3. Scraping Multiple Websites

from indo_scraper import IndoScraper

scraper = IndoScraper()

urls = [
    "https://www.smkn5bandung.sch.id/",
    "https://www.ui.ac.id/",
    "https://www.detik.com/"
]

semua_hasil = scraper.scrape_multiple(urls, max_pages=2)

for hasil in semua_hasil:
    print(f"Website: {hasil['domain']}")
    print(f"Status: {hasil['status']}")
    print("-" * 40)

4. Menggunakan dari Command Line

# Scraping basic
indo-scraper https://www.smkn5bandung.sch.id/

# Scraping dengan opsi
indo-scraper https://www.kemendikbud.go.id/ --max-pages 3 --output hasil.json --delay 2

# Lihat bantuan
indo-scraper --help

๐Ÿ“‹ Format Hasil Scraping

{
    "url": "https://www.smkn5bandung.sch.id/",
    "domain": "www.smkn5bandung.sch.id",
    "title": "SMK Negeri 5 Bandung",
    "description": "Website resmi SMK Negeri 5 Bandung",
    "content": "Konten lengkap website...",
    "links": ["https://...", "https://..."],
    "images": ["https://img1.jpg", "https://img2.png"],
    "contact_info": {
        "emails": ["info@smkn5bandung.sch.id"],
        "phones": ["(022) 1234567", "0812-3456-7890"],
        "addresses": ["Jl. Veteran No. 1, Bandung"]
    },
    "metadata": {
        "author": "...",
        "keywords": "...",
        "og:title": "..."
    },
    "status": "success",
    "scraped_pages": 1,
    "timestamp": "2024-12-07 10:30:00"
}

๐Ÿ› ๏ธ Opsi Konfigurasi

Inisialisasi Scraper

scraper = IndoScraper(
    delay=1.0,      # Jeda antar request (detik)
    timeout=30      # Timeout request (detik)
)

Parameter Scraping

scraper.scrape(
    url="https://website.co.id/",
    extract_links=True,     # Ekstrak link (default: True)
    extract_images=True,    # Ekstrak gambar (default: True)
    extract_contact=True,   # Ekstrak kontak (default: True)
    max_pages=1            # Maks halaman (default: 1)
)

๐ŸŽฏ Domain yang Didukung

Library ini dioptimalkan untuk domain Indonesia:

  • .id - Domain Indonesia
  • .co.id - Komersial Indonesia
  • .or.id - Organisasi Indonesia
  • .ac.id - Akademik Indonesia
  • .sch.id - Sekolah Indonesia
  • .net.id - Network Indonesia
  • .web.id - Web Indonesia
  • .my.id - Personal Indonesia
  • .go.id - Pemerintah Indonesia
  • .mil.id - Militer Indonesia
  • .desa.id - Desa Indonesia
  • .ponpes.id - Pondok Pesantren

๐Ÿ” Contoh Penggunaan Lengkap

Scraping Website Sekolah

from indo_scraper import IndoScraper
from indo_scraper.utils import format_scraped_data

# Buat scraper dengan delay 2 detik
scraper = IndoScraper(delay=2.0)

# Scraping website sekolah
print("๐Ÿ”„ Memulai scraping...")
hasil = scraper.scrape(
    url="https://www.smkn5bandung.sch.id/",
    max_pages=2
)

# Format dan tampilkan hasil
print(format_scraped_data(hasil))

# Simpan ke file
scraper.save_to_json(hasil, "data_sekolah.json")
print("โœ… Data berhasil disimpan!")

Scraping Website Pemerintah

from indo_scraper import IndoScraper

scraper = IndoScraper()

# Scraping website kemendikbud
hasil = scraper.scrape("https://www.kemendikbud.go.id/")

if hasil['status'] == 'success':
    print(f"๐Ÿ“Š Berhasil scraping {hasil['domain']}")
    print(f"๐Ÿ“ง Email ditemukan: {len(hasil['contact_info']['emails'])}")
    print(f"๐Ÿ“ž Telepon ditemukan: {len(hasil['contact_info']['phones'])}")
    print(f"๐Ÿ”— Link ditemukan: {len(hasil['links'])}")
else:
    print(f"โŒ Gagal scraping: {hasil.get('error', 'Unknown error')}")

Batch Scraping Multiple Websites

from indo_scraper import IndoScraper
import time

scraper = IndoScraper(delay=3.0)  # Delay 3 detik untuk menghormati server

# Daftar website Indonesia
websites = [
    "https://www.ui.ac.id/",
    "https://www.itb.ac.id/",
    "https://www.ugm.ac.id/",
    "https://www.unpad.ac.id/"
]

print("๐Ÿš€ Memulai batch scraping...")
start_time = time.time()

all_results = []
for i, url in enumerate(websites, 1):
    print(f"๐Ÿ“ฅ Scraping {i}/{len(websites)}: {url}")
    
    hasil = scraper.scrape(url, max_pages=1)
    all_results.append(hasil)
    
    # Progress info
    if hasil['status'] == 'success':
        print(f"  โœ… Berhasil - {hasil['title'][:50]}...")
    else:
        print(f"  โŒ Gagal - {hasil.get('error', 'Unknown')}")

# Summary
elapsed = time.time() - start_time
success_count = sum(1 for r in all_results if r['status'] == 'success')

print(f"\n๐Ÿ“Š RINGKASAN BATCH SCRAPING")
print(f"Total website: {len(websites)}")
print(f"Berhasil: {success_count}")
print(f"Gagal: {len(websites) - success_count}")
print(f"Waktu total: {elapsed:.2f} detik")

# Simpan semua hasil
scraper.save_to_json(all_results, "batch_scraping_results.json")

๐Ÿšจ Tips Penggunaan yang Baik

1. Menghormati Server

# Gunakan delay yang wajar (minimal 1 detik)
scraper = IndoScraper(delay=2.0)

# Jangan scraping terlalu banyak halaman sekaligus
hasil = scraper.scrape(url, max_pages=5)  # Maksimal 5 halaman

2. Error Handling

from indo_scraper import IndoScraper

scraper = IndoScraper()

try:
    hasil = scraper.scrape("https://website.co.id/")
    
    if hasil['status'] == 'success':
        print("โœ… Scraping berhasil!")
        # Proses data...
    else:
        print(f"โŒ Scraping gagal: {hasil.get('error')}")
        
except Exception as e:
    print(f"๐Ÿ’ฅ Error tak terduga: {str(e)}")

3. Validasi Domain

from indo_scraper.utils import validate_indonesian_domain

url = "https://www.example.com/"

if validate_indonesian_domain(url):
    print("โœ… Domain Indonesia terdeteksi")
    hasil = scraper.scrape(url)
else:
    print("โš ๏ธ Bukan domain Indonesia")
    # Tetap bisa scraping, tapi tidak dioptimalkan untuk Indonesia
    hasil = scraper.scrape(url)

๐Ÿ“ Command Line Interface

Perintah Dasar

# Scraping sederhana
indo-scraper https://www.smkn5bandung.sch.id/

# Dengan output file
indo-scraper https://www.ui.ac.id/ --output universitas.json

# Multiple pages dengan delay
indo-scraper https://www.detik.com/ --max-pages 3 --delay 2.5

# Tanpa ekstrak gambar dan link
indo-scraper https://www.kemendikbud.go.id/ --no-images --no-links

Opsi Command Line Lengkap

indo-scraper [URL] [OPTIONS]

Opsi:
  --max-pages N     Maksimal halaman yang di-scrape (default: 1)
  --delay N         Jeda antar request dalam detik (default: 1.0)
  --timeout N       Timeout request dalam detik (default: 30)
  --output FILE     File output JSON (opsional)
  --no-links        Jangan ekstrak link
  --no-images       Jangan ekstrak gambar
  --no-contact      Jangan ekstrak informasi kontak
  --version         Tampilkan versi
  --help           Tampilkan bantuan

๐Ÿ›ก๏ธ Keamanan dan Etika

Pedoman Penggunaan

  1. Hormati robots.txt - Selalu cek file robots.txt website
  2. Gunakan delay yang wajar - Minimal 1-2 detik antar request
  3. Jangan overload server - Batasi jumlah halaman yang di-scrape
  4. Patuhi Terms of Service - Baca dan patuhi TOS website
  5. Data pribadi - Hati-hati dengan data pribadi yang di-scrape

Contoh Penggunaan yang Bertanggung Jawab

from indo_scraper import IndoScraper

# Konfigurasi yang menghormati server
scraper = IndoScraper(
    delay=2.0,      # Delay 2 detik
    timeout=30      # Timeout wajar
)

# Scraping dengan batasan
hasil = scraper.scrape(
    url="https://website.co.id/",
    max_pages=3     # Maksimal 3 halaman saja
)

# Cek apakah ada informasi sensitif
if hasil['contact_info']['emails']:
    print("โš ๏ธ Ditemukan email - gunakan dengan bijak")

๐Ÿ› Troubleshooting

Masalah Umum

1. Error "Connection timeout"

# Tingkatkan timeout
scraper = IndoScraper(timeout=60)

2. Error "Too many requests"

# Tingkatkan delay
scraper = IndoScraper(delay=5.0)

3. Website tidak bisa diakses

# Cek status error
hasil = scraper.scrape(url)
if hasil['status'] == 'error':
    print(f"Error: {hasil['error']}")

4. Data tidak lengkap

# Scraping dengan opsi lengkap
hasil = scraper.scrape(
    url=url,
    extract_links=True,
    extract_images=True,
    extract_contact=True,
    max_pages=2
)

๐Ÿ“„ Lisensi

MIT License - Bebas untuk digunakan dan dimodifikasi.

๐Ÿค Kontribusi

Kontribusi sangat diterima! Silakan:

  1. Fork repository ini
  2. Buat branch untuk fitur baru
  3. Commit perubahan Anda
  4. Push ke branch
  5. Buat Pull Request

๐Ÿ“ž Dukungan

๐Ÿ”„ Changelog

v1.0.0

  • โœจ Rilis pertama
  • ๐Ÿš€ Scraping dasar untuk website Indonesia
  • ๐Ÿ“ง Ekstraksi otomatis email, telepon, alamat
  • ๐Ÿ’พ Export ke JSON
  • ๐Ÿ–ฅ๏ธ Command line interface
  • ๐Ÿ“ฑ Support untuk semua domain Indonesia

Dibuat dengan โค๏ธ untuk komunitas developer Indonesia

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

indo_scraper-1.0.0.tar.gz (16.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

indo_scraper-1.0.0-py3-none-any.whl (14.4 kB view details)

Uploaded Python 3

File details

Details for the file indo_scraper-1.0.0.tar.gz.

File metadata

  • Download URL: indo_scraper-1.0.0.tar.gz
  • Upload date:
  • Size: 16.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for indo_scraper-1.0.0.tar.gz
Algorithm Hash digest
SHA256 ca70c049417c4399e9cbc630a4fc24275aca6dd5b70f7297e2eb42d01a2a0087
MD5 ce479b7fa5bdea99a2b962b34d4f318f
BLAKE2b-256 17b6d850f707237da2d1064c4b481b8414b9ec78a00a50ecd388a7a929f5de4f

See more details on using hashes here.

File details

Details for the file indo_scraper-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: indo_scraper-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 14.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for indo_scraper-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6349783801fef1008592f416a059dfb1af6bfeb40f31e85cea154141a286c589
MD5 43e19653e964182c6f2bcf2d5a3554d1
BLAKE2b-256 081cf692542d701b1a58deb00e04e6539131b7f9c87a7f88d78989c3fc40869b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page