Monday, June 22, 2026
Python Saham

Cara Praktis Scraping Data Laporan Keuangan Emiten Menggunakan Python

Halo sobat Ngoprek Tech! Dalam mengelola sistem atau server, kita terbiasa membaca log file untuk mengetahui kesehatan sistem. Di dunia pasar modal, “log kesehatan” dari sebuah perusahaan tertuang di dalam Laporan Keuangan (Laba Rugi, Neraca, dan Arus Kas).

Bagi investor fundamental yang menganalisis puluhan emiten, mengunduh file PDF laporan keuangan satu per satu lalu menyalin angkanya ke Excel secara manual adalah pekerjaan yang sangat melelahkan dan tidak efisien.

Sebagai penggiat IT, kita pantang melakukan hal berulang secara manual. Jika sebuah data tampil di browser, artinya data tersebut bisa kita ekstrak secara otomatis. Di artikel kali ini, kita akan ngoprek cara melakukan Web Scraping data laporan keuangan emiten menggunakan bahasa pemrograman Python.

Apa Itu Web Scraping?

Secara sederhana, Web Scraping adalah teknik automasi di mana kita menyuruh script (bot) untuk melakukan request ke sebuah URL web, mengunduh kerangka HTML-nya, lalu membedah (parsing) tag-tag HTML tersebut untuk mengambil data spesifik yang kita inginkan (misalnya teks di dalam <table> atau <div>).

Ini mirip seperti Anda menggunakan perintah curl di terminal Linux untuk menarik source code sebuah website, lalu menggunakan perintah grep dan awk untuk menyaring teksnya. Namun, dengan Python, proses ini jauh lebih rapi dan tangguh.

Persiapan Tools (Library Python)

Pastikan Python 3 sudah terinstal di PC Anda. Kita akan menggunakan tiga library utama yang merupakan “senjata wajib” seorang Data Engineer:

Buka terminal/CMD Anda, dan jalankan perintah instalasi berikut:

Bash

pip install requests beautifulsoup4 pandas
  • Requests: Berfungsi untuk melakukan HTTP GET request (mengunduh halaman web).
  • BeautifulSoup (bs4): Berfungsi untuk membedah dan menavigasi struktur Document Object Model (DOM) HTML.
  • Pandas: Berfungsi untuk merapikan data hasil scrape menjadi format tabel (Dataframe) agar mudah diekspor ke format CSV atau Excel.

Tantangan Scraping Web Finansial Modern

Satu hal yang perlu Anda ketahui: Website finansial modern (seperti situs resmi BEI) sering kali dibangun menggunakan teknologi Client-Side Rendering (seperti React atau Vue.js), di mana data tidak langsung ada di HTML awal, melainkan dimuat belakangan via JavaScript/API.

Untuk tutorial dasar ini, kita akan menggunakan metode ekstraksi tabel klasik yang bekerja sangat baik pada portal finansial yang menampilkan laporan keuangan dalam tag <table> HTML standar.

Langkah 1: Menulis Skrip Python

Buat file baru bernama scrape_keuangan.py di teks editor Anda (VS Code/PyCharm), lalu salin kode berikut:

Python

import requests
from bs4 import BeautifulSoup
import pandas as pd

# 1. Tentukan URL target (Contoh: portal finansial yang menampilkan tabel fundamental)
# Catatan: Ubah URL ini sesuai dengan portal data saham yang ingin Anda tuju
url = 'https://situs-finansial-contoh.com/saham/BBCA/keuangan'

# 2. Setup Headers agar request kita tidak diblokir (Menyamar sebagai Browser sungguhan)
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}

print("Mengirim request ke server...")
response = requests.get(url, headers=headers)

# 3. Cek apakah HTTP Status Code adalah 200 (OK)
if response.status_code == 200:
    print("Koneksi berhasil! Mulai parsing HTML...")
    
    # 4. Parsing HTML menggunakan BeautifulSoup
    soup = BeautifulSoup(response.text, 'html.parser')
    
    # 5. Mencari elemen tabel di dalam HTML
    # Cari tag <table> dengan class tertentu, atau gunakan find_all('table')
    tabel_keuangan = soup.find('table') 
    
    if tabel_keuangan:
        # 6. Keajaiban Pandas: Konversi tag <table> HTML langsung menjadi Dataframe
        df_list = pd.read_html(str(tabel_keuangan))
        
        # Ambil dataframe pertama dari list
        df = df_list[0]
        
        print("\n=== DATA LAPORAN KEUANGAN BERHASIL DIEKSTRAK ===")
        print(df.head()) # Tampilkan 5 baris pertama di console
        
        # 7. Ekspor data ke file Excel/CSV
        nama_file = 'Laporan_Keuangan_BBCA.csv'
        df.to_csv(nama_file, index=False)
        print(f"\nData berhasil disimpan ke {nama_file}")
        
    else:
        print("Error: Tag tabel tidak ditemukan di halaman tersebut.")
else:
    print(f"Gagal mengakses web. HTTP Status Code: {response.status_code}")

Membedah Cara Kerja Skrip (Logika Sistem)

Mari kita bahas poin-poin krusial dari skrip di atas:

  1. User-Agent (Spoofing): Banyak server web dilengkapi Firewall (seperti Cloudflare) yang akan memblokir request dari script Python polos. Dengan menambahkan Header User-Agent, kita memberi tahu server bahwa “Hei, saya adalah browser Google Chrome dari Windows 10,” sehingga sistem keamanan mengizinkan kita masuk.
  2. pd.read_html(): Ini adalah jalan pintas yang sangat brilian. Daripada kita harus melakukan looping baris per baris (<tr> dan <td>) menggunakan BeautifulSoup secara manual, library Pandas memiliki fungsi read_html yang bisa langsung membaca struktur tabel HTML dan mengubahnya menjadi database rapi.
  3. Ekspor CSV: Data yang sudah rapi langsung di-dump ke dalam format .csv, yang nantinya sangat mudah Anda olah lebih lanjut menggunakan Excel atau Google Sheets.

Etika Web Scraping (Penting!)

Sebagai engineer yang baik, kita harus mematuhi etika scraping agar aktivitas kita tidak merugikan server pihak lain:

  • Selalu cek file robots.txt pada domain target (misal: domain.com/robots.txt) untuk memastikan URL tersebut diizinkan untuk di-crawl.
  • Gunakan fungsi jeda (misal: time.sleep(3)) jika Anda melakukan looping untuk mengambil data dari ratusan halaman emiten sekaligus. Menembak server puluhan kali per detik sama saja Anda sedang melakukan serangan DDoS.

Kesimpulan

Dengan menguasai teknik Web Scraping dasar menggunakan Python, Anda kini bisa membangun database laporan keuangan emiten Anda sendiri secara offline.

Bayangkan jika skrip ini Anda gabungkan dengan tutorial kita sebelumnya: Skrip ini menarik laporan laba bersih terbaru dari web, menyimpannya, lalu mengirimkan hasilnya ke Ollama lokal untuk dianalisis sentimennya, dan diakhiri dengan peringatan ke Telegram Anda jika laba emiten tersebut memburuk! Semuanya berjalan otomatis di latar belakang.

Itulah kekuatan sejati dari automasi. Ada yang mengalami error library atau HTTP Error 403 saat mencoba skrip di atas? Mari kita debug bersama di kolom komentar!

Similar Posts

Leave a Reply

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