Web Scraping, Membuat Aplikasi CLI untuk Ekstraksi Statistik IPL

By adminmeta

Published on:

Web Scraping

Pendahuluan

Web scraping bisa kita manfaatkan untuk melihat data dari sebuah peristiwa. Misalnya, dricket adalah permainan bat dan bola yang kita mainkan antara dua tim yang masing-masing terdiri dari 11 pemain. Ini adalah olahraga kedua yang paling banyak tertonton di dunia, dan Indian Premier League (IPL) adalah salah satu liga paling populer dan menguntungkan dalam olahraga ini. Dalam artikel ini, kita akan membahas cara membuat aplikasi Command Line Interface (CLI) yang dapat mengekstrak data statistik pemain dan tim dari situs resmi IPL untuk tahun 2008 hingga edisi terbaru.

Dengan menggunakan Python dan beberapa pustaka seperti Beautiful Soup, Requests, PyInquirer, re, os, signal, sys, pandas, dan numpy, kita akan membangun web scraping aplikasi yang dapat mengambil data statistik yang komprehensif dari situs web IPL.

Alat dan Pustaka yang Digunakan dalam Web Scraping

  1. Beautiful Soup: Pustaka Python untuk ekstraksi data dari file HTML dan XML. Beautiful Soup bekerja dengan parser untuk menyediakan cara navigasi, pencarian, dan modifikasi tree parse yang intuitif.
  2. Requests: Digunakan untuk mengunduh konten HTML dari situs resmi IPL.
  3. PyInquirer: Kumpulan antarmuka pengguna interaktif command-line yang umum, yang akan kita gunakan untuk memberikan antarmuka CLI kepada pengguna.
  4. re: Digunakan untuk ekspresi reguler.
  5. os: Untuk menangani alamat direktori.
  6. signal dan sys: Untuk menangani interupsi keyboard dan keluar dari aplikasi secara baik.
  7. pandas dan numpy: Untuk manipulasi data.

Gambaran Umum Aplikasi Web Scraping

Aplikasi ini akan meminta data dari pengguna sebagai berikut:

  1. Tahun: Pengguna dapat memilih tahun dari 2008 hingga tahun saat ini atau memilih semua rekor waktu.
  2. Statistik: Situs web menyediakan banyak dataset, sehingga pengguna dapat memilih beberapa atau semua dari mereka.

Setelah mendapatkan input dari pengguna, kita akan membangun URL. URL tersebut memiliki format:

https://www.iplt20.com/stats/ + <tahun/> + <nama statistik>

Kemudian, kita akan menggunakan pustaka Requests untuk mengunduh HTML. HTML ini kemudian akan di-parse menggunakan HTML parser dan kita ubah menjadi objek Beautiful Soup. Objek Beautiful Soup ini akan kita gunakan sepanjang proses untuk mengekstrak data yang berarti.

Membuat Aplikasi CLI: Langkah demi Langkah

1. Mengatur Lingkungan

Pertama, kita perlu menginstal pustaka yang diperlukan. Jalankan perintah berikut di terminal agar bisa memulai web scraping:

pip install beautifulsoup4 requests pyinquirer pandas numpy

2. Mengimpor Pustaka

Selanjutnya, kita akan mengimpor pustaka yang kita perlukan dalam file Python kita:

import requests
from bs4 import BeautifulSoup
from PyInquirer import prompt
import re
import os
import signal
import sys
import pandas as pd
import numpy as np

3. Menangani Interupsi Keyboard

Agar web scraping aplikasi dapat keluar secara baik saat pengguna menekan Ctrl+C, kita akan menambahkan kode berikut:

def signal_handler(sig, frame):
    print('Exiting gracefully')
    sys.exit(0)

signal.signal(signal.SIGINT, signal_handler)

4. Mengumpulkan Input Pengguna

Menggunakan PyInquirer untuk mengumpulkan input dari pengguna:

questions = [
    {
        'type': 'list',
        'name': 'year',
        'message': 'Select the year:',
        'choices': [str(year) for year in range(2008, 2024)] + ['All-time records']
    },
    {
        'type': 'checkbox',
        'name': 'stats',
        'message': 'Select the statistics:',
        'choices': ['Most Runs', 'Most Wickets', 'Highest Scores', 'Best Bowling Figures', 'Most Sixes']
    }
]

answers = prompt(questions)
year = answers['year']
stats = answers['stats']

5. Mengunduh dan Mem-parse HTML

Membangun URL dan mengunduh konten HTML:

base_url = "https://www.iplt20.com/stats/"
urls = [base_url + year + "/" + stat.replace(" ", "-").lower() for stat in stats]

def fetch_html(url):
    response = requests.get(url)
    if response.status_code == 200:
        return response.text
    else:
        return None

html_content = [fetch_html(url) for url in urls]

6. Mengekstraksi Data dengan Beautiful Soup

Menggunakan Beautiful Soup untuk mengekstraksi data dari HTML:

def parse_html(html):
    soup = BeautifulSoup(html, 'html.parser')
    table = soup.find('table')
    headers = [header.text for header in table.find_all('th')]
    rows = table.find_all('tr')[1:]
    data = [[cell.text for cell in row.find_all('td')] for row in rows]
    return headers, data

all_data = [parse_html(html) for html in html_content]

7. Menyimpan Data dalam Pandas DataFrame

Setelah mengekstraksi data menggunakan Beautiful Soup, langkah berikutnya adalah mengonversi data tersebut ke dalam format DataFrame menggunakan Pandas. Ini akan memudahkan manipulasi data dalam web scraping lebih lanjut dan menyimpannya dalam file CSV atau format lainnya. Berikut adalah caranya:

pythonCopy codeimport pandas as pd

def save_data(headers, data, year, stat):
    # Membuat DataFrame dari data yang diekstrak
    df = pd.DataFrame(data, columns=headers)
    # Menyimpan DataFrame ke dalam file CSV
    file_name = f"{year}_{stat.lower().replace(' ', '_')}.csv"
    df.to_csv(file_name, index=False)
    print(f"Data saved to {file_name}")

# Menyimpan semua data yang diekstrak
for (headers, data), stat in zip(all_data, stats):
    save_data(headers, data, year, stat)

Dengan fungsi save_data, kita bisa menyimpan setiap set data statistik dalam file CSV yang terpisah, yang kemudian dapat terakses dan teranalisis lebih lanjut.

loading...

Tinggalkan komentar