Scraping Komentar YouTube Menggunakan YouTube Data API v3
Kadang kita ingin menganalisis komentar dari video YouTube entah untuk sentiment analysis, riset topik, atau sekadar eksplorasi data sosial media.
YouTube sendiri menyediakan YouTube Data API v3, dan dengan sedikit Python, kita bisa mengunduh komentar-komentar itu secara terstruktur.
Di artikel ini, kita akan membuat scraper sederhana menggunakan googleapiclient dan menyimpan hasilnya ke CSV.
1. Persiapan API Key
Sebelum menulis kode, kamu harus punya API Key YouTube.
- Masuk ke Google Cloud Console.
- Buat project baru → aktifkan YouTube Data API v3.
- Masuk ke APIs & Services → Credentials → Create Credentials → API Key.
- Simpan key itu dengan aman (nanti dipakai di kode Python).
2. Instalasi Library
Kita hanya butuh tiga library utama:google-api-python-client, pandas, dan tqdm (opsional untuk progress bar).
pip install google-api-python-client pandas tqdm3. Inisialisasi API Client
Pertama, hubungkan Python dengan YouTube API menggunakan key yang sudah dibuat.
from googleapiclient.discovery import build
API_KEY = "ISI_API_KEY_KAMU"
youtube = build("youtube", "v3", developerKey=API_KEY)Kode di atas membuat objek youtube yang akan kita pakai untuk memanggil endpoint seperti videos.list() dan commentThreads.list().
4. Ambil Metadata Video
Kita bisa mulai dari satu link video dan mengambil info dasarnya:
judul, channel, tanggal upload, jumlah view, likes, dan komentar.
video_id = "abc123XYZ" # ambil dari URL setelah v=
req = youtube.videos().list(
part="snippet,statistics,contentDetails",
id=video_id
)
res = req.execute()Ambil hasilnya
info = res["items"][0]
print("Judul:", info["snippet"]["title"])
print("Channel:", info["snippet"]["channelTitle"])
print("Tanggal:", info["snippet"]["publishedAt"])
print("View:", info["statistics"].get("viewCount"))
print("Like:", info["statistics"].get("likeCount"))
print("Komentar:", info["statistics"].get("commentCount"))Dengan endpoint videos.list, kita bisa verifikasi bahwa video tersebut punya komentar aktif sebelum lanjut ke scraping.
5. Mengambil Semua Komentar
Langkah berikutnya: ambil komentar utama dan balasannya (replies).
Kita gunakan endpoint commentThreads.list.
import pandas as pd
from tqdm import tqdm
def fetch_comments(video_id):
comments = []
page_token = None
while True:
res = youtube.commentThreads().list(
part="snippet,replies",
videoId=video_id,
maxResults=100,
textFormat="plainText",
pageToken=page_token
).execute()Setiap item dalam hasil API berisi komentar utama (topLevelComment)
dan kadang memiliki replies kita ambil dua-duanya.
for th in res["items"]:
top = th["snippet"]["topLevelComment"]["snippet"]
comments.append({
"videoId": video_id,
"author": top.get("authorDisplayName"),
"text": top.get("textDisplay"),
"likeCount": top.get("likeCount"),
"publishedAt": top.get("publishedAt")
})
# ambil balasan
for rp in th.get("replies", {}).get("comments", []):
rps = rp["snippet"]
comments.append({
"videoId": video_id,
"author": rps.get("authorDisplayName"),
"text": rps.get("textDisplay"),
"likeCount": rps.get("likeCount"),
"publishedAt": rps.get("publishedAt")
})Lanjutkan dengan pagination:
page_token = res.get("nextPageToken")
if not page_token:
break
return pd.DataFrame(comments)
6. Simpan ke CSV
Sekarang tinggal jalankan fungsi tersebut dan simpan hasilnya:
df = fetch_comments(video_id)
df.to_csv("youtube_comments.csv", index=False)
print(f"{len(df)} komentar berhasil disimpan!")
Kamu akan mendapatkan file CSV seperti ini:
| videoId | author | text | likeCount | publishedAt |
|---|---|---|---|---|
| abc123XYZ | User A | Mantap sekali videonya! | 12 | 2025-10-18T12:20:00Z |
| abc123XYZ | User B | Saya kurang setuju... | 4 | 2025-10-18T13:02:00Z |
7. (Opsional) Loop Beberapa Video Sekaligus
Kalau kamu punya beberapa link video, ekstrak ID-nya otomatis.
urls = [
"https://www.youtube.com/watch?v=abc123XYZ",
"https://youtu.be/def456LMN"
]
video_ids = [u.split("v=")[-1].split("&")[0] if "v=" in u else u.split("/")[-1] for u in urls]
all_comments = pd.concat([fetch_comments(v) for v in tqdm(video_ids)])
all_comments.to_csv("all_youtube_comments.csv", index=False)
8. Tips & Limitasi
- API punya kuota harian, jadi batasi jumlah video atau halaman komentar.
- Setiap permintaan
commentThreads.list= 1 unit kuota per 100 komentar. - Gunakan
time.sleep(1)di loop besar untuk menghindari error quota exceeded. - Komentar dari video disabled tidak bisa diambil (akan mengembalikan list kosong).
- Gunakan
relevanceLanguage="id"kalau kamu ingin hasil berbahasa Indonesia saja.
Demikian tutorial singkat untuk scrapping komentar youtube menggunakan Youtube Data API V3 semiga bisa digunakan untuk hal-hal bermanfaat.
Download kode lenkapnya disini