Scraping Data Film Indonesia dari TMDB menggunakan Python
Assalamualaikum warahmatullahi wabarakatuh
Semoga Allah Subhana Wata’ala senantiasa mencurah-curahkan RahmatNya kepada kita semua dan semoga sholawat serta salam senantiasa tercurahkan kepada Rosulullah Shalallahu Alaihi Wassalam
Terkhusus untuk para sahabat penuntut ilmu di bidang data, semoga Allah mempermudah proses belajar temen-temen, dan semoga ilmu yang temen-temen pelajari menjadi ilmu yang bermanfaat
Scraping Data
Scraping adalah metode pengumpulan data dari web secara otonom. Artinya kita tidak perlu melakukannya secara manual(copy paste). Scraping data ini sangat bermanfaat untuk anda yang ingin mengumpulkan data dari website di internet. Misal untuk Anda yang ingin melihat bagaimana pengguna twitter merespon produk Anda melalui tagar yang anda promosikan, Anda dapat melakukan scraping pada data twitter. Scraping data dapat dilakukan dengan dua cara(paling tidak yang dibahas pada tulisan ini) yaitu scraping secara langsung atau menggunakan API. API memudahkan kita untuk mengakses data dari website selama suatu situs telah menyediakannya untuk Anda.
Data Film Indonesia di TMDB
Sebelum saya menulis artikel ini, saya mengalami kesulitan untuk mendapatkan data seperti pada data imdb untuk data film Indonesia. Kemudian saya mencari di internet dan menemukan situs https://www.themoviedb.org/ . Di situs ini tersedia data film di seluruh dunia dengan lengkap. Lebih kerennya lagi website ini juga menyediakan API yang bebas untuk diakses semua orang. Kita membutuhkan API key untuk mengakses data tmdb, Anda bisa melakukan pendaftaran secara gratis di link berikut : https://www.themoviedb.org/.
Anda dapatmelengkapi form pendaftaran di atas dan kemudian melakukan verifikasi via email.
Kemudian untuk mendapatkan API key, Anda bisa melakukan pengajuan API key. Untuk mendaftar API key, klik dari dalam halaman pengaturan akun Anda. Anda juga dapat melihat tangkapan layar di bawah ini untuk mendapatkan bantuan:
- Klik avatar atau inisial Anda di navigasi utama (screenshoot)
- Klik tautan “Pengaturan” (screenshoot)
- Klik tautan “API” di sidebar kiri (screenshot)
- Klik “Buat” atau “klik di sini” di halaman API (screenshoot)
Jika Anda telah menyelesaikan pendaftaran dan permohonan API key(permohonan API langsung di setujui), Anda bisa sepenuhnya menggunakan python code yang akan saya bagikan di bawah ini.
Installasi Library
Jika kamu belum menginstall library tmdbv3api, kamu bisa mengetikkan kode berikut di cell code halaman jupyter notebook Anda.
pip install tmdbv3api
Kemudian kita import beberapa library yang kita perlukan seperti di bawah ini:
from tmdbv3api import TMDb # untuk mengakses API tmdb
from tmdbv3api import Movie # untuk mengakses data film tmdb
import pandas as pd # untuk mengolah data tabular
from datetime import datetime # untuk mengolah tipe data waktu
Authorization
Untuk dapat mengakses API, Anda perlu menginputkan key API yang telah Anda peroleh. Berikut adalah python code untuk API authorization :
tmdb = TMDb() # memanggil modul tmdb
tmdb.api_key = 'api_key' # input api key anda di sini
tmdb.language = 'id' # menentukan bahasa film yang diinginkan (Indonesia)
tmdb.debug = True # mengijinkan proses debuging
Mengumpulkan Data Movie menggunakan movie id
Pada artikel ini, secara singkat saya akan membagikan movie id dari film-film Indonesia yang telah saya scraping terlebih dahulu menggunakan Selenium. Anda dapat mengaksesnya pada link berikut. https://github.com/jokoeliyanto/Artikel-Medium
movie = Movie() # memanggil modul movie
df = pd.read_csv('movie_id.csv') # membuka data csv movie id
movie_id = df.movie_id.to_list() # konversi movie id dalam bentuk list
Saya terbiasa untuk membuat python code tahap demi tahap. Pada awalnya saya akan membuat list kosong untuk berbagai variabel yang akan saya simpan sebagai berikut:
title = []
overview = []
popularity = []
adult = []
original_language = []
country_id = []
country = []
company_id = []
company_name = []
company_country = []
runtime = []
revenue = []
release_date = []
vote_count = []
vote_average = []
certification = []
imdb_id = []
Untuk mendapatkan informasi detail dari sebuah film berdasarkan input movie id nya dapat dicontohkan sebagai berikut:
m = movie.details(250820)
print(m.title) # judul film
print(m.overview) # ringkasan film
print(m.popularity) # skor popularitas film
Output-nya adalah sebagai berikut:
Cinta Dalam Kardus
Film ini bercerita tentang Miko, orang yang percaya bahwa cinta itu menuntut dan tidak pernah bisa menerima seseorang apa adanya. I love you just the way you are itu justru tanda buat berpisah. Dan persis itulah yang ia rasakan saat ini, pada hubungannya dengan Putri. Miko mulai mempertimbangkan untuk putus.
4.316
Kemudian, setelah Anda memahami bagaimana cara mengambil variabel yang Anda inginkan menggunakan method movie.details(), kita akan lanjutkan untuk semua movie id yang kita punya dengan for loop sebagai berikut:
# menjalankan looping untuk indeks dan movie id
for i, m_id in enumerate(movie_id):
# Menampilkan indeks dan persentase baris yang terproses
print('progres: '+ str(i) + ' ' + str(i/len(movie_id)*100) + '%' )
# Mengambil data film dari id input
m = movie.details(m_id)
# Judul Film
title.append(m.title)
# Ringkasan Film
overview.append(m.overview)
# Skor Popularitas Film
popularity.append(m.popularity)
# Status Film Dewasa atau Bukan
adult.append(m.adult)
# Bahasa Asli yang Digunakan dalam Film
original_language.append(m.original_language)
# ID Negara Asal Film
if m.production_countries != []:
country_id.append(m.production_countries[0].iso_3166_1)
else:
country_id.append(None)
# Nama Negara Asal Film
if m.production_countries != []:
country.append(m.production_countries[0].name)
else:
country.append(None)
# ID Perusahaan Produsen Film
if m.production_companies != []:
company_id.append(m.production_companies[0].id)
else:
company_id.append(None)
# Nama Perusahaan Produsen Film
if m.production_companies != []:
company_name.append(m.production_companies[0].name)
else:
company_name.append(None)
# Negara Asalh Perusahaan Produsen Film
if m.production_companies != []:
company_country.append(m.production_companies[0].origin_country)
else:
company_country.append(None)
# Durasi Film
runtime.append(m.runtime)
# Pendapatan Film
revenue.append(m.revenue)
# Tanggal Rilis Film
release_date.append(m.release_date)
# Jumlah Dukungan di TMDB
vote_count.append(m.vote_count)
# Rerata Dukungan di TMDB
vote_average.append(m.vote_average)
# Sertifikasi Film
certification.append(m.release_dates.results[0].release_dates[0].certification)
# ID Film di IMDB
imdb_id.append(m.imdb_id)
Jika tidak ada error berikut contoh tampilan di cell output :
progres: 0 0.0%
progres: 1 0.042735042735042736%
progres: 2 0.08547008547008547%
progres: 3 0.1282051282051282%
progres: 4 0.17094017094017094%
Kemudian kita simpan hasil di atas pada sebuah dataframe :
df = pd.DataFrame({'id':movie_id,
'judul':title,
'ringkasan':overview,
'popularitas':popularity,
'dewasa':adult,
'original_language':original_language,
'id_negara':country_id,
'negara':country,
'id_perusahaan':company_id,
'perusahaan':company_name,
'negara_asal_perusahaan':company_country,
'durasi':runtime,
'pendapatan':revenue,
'tanggal_rilis':release_date,
'jumlah_vote':vote_count,
'vote_rata_rata':vote_average,
'id_imdb':imdb_id})
df.head()
Output:
Sedikit Data Cleaning
Kita akan mengganti tipe data tanggal_rilis menjadi date dan menambahkan kolom tahun_rilis:
# Konversi tipe data ke date time
df['tanggal_rilis'] = pd.to_datetime(df['tanggal_rilis'])
# Ekstraksi tahun dari variabel tanggal_rilis
df['tahun_rilis'] = pd.DatetimeIndex(df['tanggal_rilis']).year
# Menyimpan dataframe dalam file csv
df.to_csv('film_indonesia.csv'', index=False)
Penutup
Alhamdulillah, demikian artikel tentang scraping data film indonesia dari tmdb menggunakan python. Python Notebook lengkap dapat diakses di link berikut:
https://github.com/jokoeliyanto/Artikel-Medium
Sekian, sampai jumpa di tulisan berikutnya. Nun wal qolami wama yasturun, Wassalamualaikum Warahmatullahi Wabarakatuh