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
- Hormati robots.txt - Selalu cek file robots.txt website
- Gunakan delay yang wajar - Minimal 1-2 detik antar request
- Jangan overload server - Batasi jumlah halaman yang di-scrape
- Patuhi Terms of Service - Baca dan patuhi TOS website
- 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:
- Fork repository ini
- Buat branch untuk fitur baru
- Commit perubahan Anda
- Push ke branch
- Buat Pull Request
๐ Dukungan
- ๐ Bug reports: GitHub Issues
- ๐ก Feature requests: GitHub Issues
- ๐ Dokumentasi: GitHub Wiki
- ๐ง Email: adepratama20071907@gmail.com
๐ 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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca70c049417c4399e9cbc630a4fc24275aca6dd5b70f7297e2eb42d01a2a0087
|
|
| MD5 |
ce479b7fa5bdea99a2b962b34d4f318f
|
|
| BLAKE2b-256 |
17b6d850f707237da2d1064c4b481b8414b9ec78a00a50ecd388a7a929f5de4f
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6349783801fef1008592f416a059dfb1af6bfeb40f31e85cea154141a286c589
|
|
| MD5 |
43e19653e964182c6f2bcf2d5a3554d1
|
|
| BLAKE2b-256 |
081cf692542d701b1a58deb00e04e6539131b7f9c87a7f88d78989c3fc40869b
|