Cara mengikis YouTube menggunakan Python

Komentar: 0

Mengikis data dari YouTube dapat menjadi tantangan karena kontennya yang dinamis dan tindakan anti-kikis. Namun, dengan alat dan teknik yang tepat, Anda dapat mengekstrak informasi yang berguna secara efisien. Pada artikel ini, kami akan memandu Anda melalui proses pengikisan data video YouTube menggunakan Python, Playwright, dan lxml.

Memahami Struktur Data untuk Mengikis Youtube dengan Python

Sebelum kita mengetahui cara mengulik YouTube, kita perlu memahami strukturnya. Platform ini memiliki begitu banyak fitur yang tersedia yang memiliki beragam jenis data yang dapat dipilih terkait aktivitas pengguna dan statistik video. Beberapa parameter utama dari platform ini termasuk judul dan deskripsi video, tag yang ditambahkan, jumlah penayangan, suka dan komentar, serta informasi saluran dan daftar putar. Elemen-elemen ini sangat penting bagi pemasar konten dan kreator untuk menilai kinerja video dan menyusun strategi bagaimana merumuskan konten video.

Dengan API Data YouTube, pengembang dapat mengakses sebagian besar metrik secara terprogram. API ini juga memungkinkan akses ke jumlah pelanggan serta video di saluran yang menyediakan sejumlah besar data untuk tujuan analisis dan integrasi.

Namun, mungkin ada beberapa elemen tertentu yang tidak mungkin didapat melalui API dan dengan demikian hanya dapat diambil melalui web scraping. Misalnya, mendapatkan beberapa metrik keterlibatan pemirsa yang mendetail, seperti sentimen komentar mereka atau waktu tertentu ketika mereka terlibat, akan membutuhkan beberapa pendekatan untuk mengikis halaman Youtube. Teknik ini biasanya lebih rumit dan dapat memiliki risiko dengan tampilan konten platform yang terus berkembang serta peraturan ketat mereka tentang penggalian data.

Dalam blok berikut ini kami akan menunjukkan kepada Anda cara membuat skrip dan cara mengikis data dari Youtube dengan Python secara efisien.

Menggunakan Proksi untuk Menghindari Deteksi Saat Mengikis YouTube

Untuk mengikis video Youtube dengan Python, penggunaan proksi sangat penting untuk menghindari larangan IP dan metode pencegahan penelusuran bot. Berikut ini beberapa jenis dan deskripsinya:

  1. Proksi residensial terhubung ke alamat IP asli yang asli dan digunakan sebagai koneksi otentik untuk situs web. Untuk mengikis data Youtube, di mana kepercayaan sangat dibutuhkan agar tidak ketahuan, proksi adalah pilihan terbaik. Proksi memungkinkan scraper untuk berperilaku seperti pengguna asli, sehingga kemungkinan terdeteksi sebagai bot dapat diminimalkan.
  2. Proksi ISP menyediakan jalan tengah antara IP perumahan dan proksi pusat data. Mereka disediakan oleh penyedia layanan internet, yang mengeluarkan alamat IP asli, yang terkenal sulit untuk ditandai sebagai proksi. Kualitas ini membuat proksi ISP sangat efektif dalam kasus-kasus ketika perlu mengikis hasil pencarian Youtube, yang membutuhkan keaslian dan kinerja yang luar biasa.
  3. Meskipun Datacenter memiliki kecepatan tertinggi, mereka dapat dengan mudah diidentifikasi oleh platform seperti YouTube karena berasal dari pusat data yang besar. Risiko diblokir saat melakukan scraping cukup tinggi, meskipun mereka efisien dan mudah digunakan. Jenis ini paling baik digunakan ketika kebutuhan untuk pemrosesan data yang cepat lebih besar daripada risiko yang ditimbulkan oleh pendeteksian.
  4. Proksi seluler memberikan solusi yang paling sah karena merutekan koneksi melalui perangkat seluler pada jaringan seluler. Penggunaannya untuk tugas-tugas scraping adalah yang paling efektif karena kecil kemungkinannya untuk diblokir, karena IP seluler sering kali dirotasi oleh penyedia layanan, membuat proxy seluler jauh lebih kecil kemungkinannya untuk ditandai. Namun, perlu dicatat bahwa kecepatannya mungkin jauh lebih rendah daripada jenis lainnya.

Ketika menggunakan jenis-jenis ini secara strategis, dimungkinkan untuk mengikis data dari Youtube tanpa terdeteksi, memungkinkan untuk terus mengakses data sambil tetap mematuhi Ketentuan Layanan platform. Selain itu, memahaminya dengan benar akan sangat membantu Anda ketika Anda perlu menemukan proksi untuk mengikis.

Penyiapan lingkungan

Instal pustaka yang diperlukan menggunakan pip:

pip install playwright 
pip install lxml

Instal binari peramban Playwright:

playwright install

Untuk menginstal binari peramban Chromium, gunakan perintah berikut:

playwright install chromium

Untuk melakukan web scraping data YouTube dengan Python, Anda memerlukan pustaka berikut ini:

  1. Playwright: Pustaka yang kuat untuk mengotomatiskan peramban tanpa kepala, memungkinkan Anda berinteraksi dengan halaman web seolah-olah Anda adalah pengguna sungguhan;
  2. lxml: Pustaka yang cepat dan kaya fitur untuk memproses XML dan HTML dalam Python, mendukung XPath untuk menanyakan dokumen;
  3. Modul CSV: Pustaka Python bawaan untuk menyimpan data yang diekstrak ke dalam file CSV.

Langkah 1: Impor pustaka yang diperlukan

import asyncio
from playwright.async_api import Playwright, async_playwright
from lxml import html
import csv

Langkah 2: Otomatisasi peramban tanpa kepala

Luncurkan browser tanpa kepala dengan Playwright, navigasikan ke URL video YouTube, dan tunggu hingga halaman dimuat sepenuhnya.

Gulir halaman untuk memuat lebih banyak komentar.

browser = await playwright.chromium.launch(headless=True)
context = await browser.new_context()
page = await context.new_page()

# Menavigasi ke URL video YouTube
await page.goto("https://www.youtube.com/watch?v=Ct8Gxo8StBU", wait_until="networkidle")

# Gulir ke bawah untuk memuat lebih banyak komentar
for _ in range(20):
    await page.mouse.wheel(0, 200)
    await asyncio.sleep(0.2)

# Memberikan waktu untuk memuat konten tambahan
await page.wait_for_timeout(1000)

Langkah 3: Penguraian konten HTML

Ekstrak konten HTML halaman menggunakan Playwright dan parsing dengan lxml.

# Mengekstrak konten halaman
page_content = await page.content()

# Mengurai konten HTML
parser = html.fromstring(page_content)

Langkah 4: Ekstraksi data

Ekstrak titik data yang diperlukan (misalnya, judul, saluran, komentar) menggunakan ekspresi XPath.

Kumpulkan semua data yang relevan, termasuk metadata video dan komentar.

# Mengekstrak data video
title = parser.xpath('//div[@id="title"]/h1/yt-formatted-string/text()')[0]
channel = parser.xpath('//yt-formatted-string[@id="text"]/a/text()')[0]
channel_link = 'https://www.youtube.com' + parser.xpath('//yt-formatted-string[@id="text"]/a/@href')[0]
posted = parser.xpath('//yt-formatted-string[@id="info"]/span/text()')[2]
total_views = parser.xpath('//yt-formatted-string[@id="info"]/span/text()')[0]
total_comments = parser.xpath('//h2[@id="count"]/yt-formatted-string/span/text()')[0]
comments_list = parser.xpath('//yt-attributed-string[@id="content-text"]/span/text()')

Langkah 5: Menyimpan data

Simpan data yang diekstrak ke dalam file CSV untuk memudahkan analisis dan penyimpanan.

# Menyimpan data ke file CSV
with open('youtube_video_data.csv', 'w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    writer.writerow(["Title", "Channel", "Channel Link", "Posted", "Total Views", "Total Comments", "Comments"])
    writer.writerow([title, channel, channel_link, posted, total_views, total_comments, ", ".join(comments_list)])

Implementasi proxy

Proksi memainkan peran penting dalam scraping web, terutama ketika berhadapan dengan ekstraksi data berskala besar atau situs dengan tindakan anti-bot yang ketat seperti YouTube. Berikut ini adalah bagaimana proxy diimplementasikan dalam skrip Playwright:

Penyiapan proxy:

  1. Parameter proxy di playwright.chromium.launch() digunakan untuk merutekan semua lalu lintas peramban melalui server proxy tertentu.
  2. Rincian server proxy, termasuk alamat server, nama pengguna, dan kata sandi, harus dikonfigurasi.

browser = await playwright.chromium.launch(
        headless=True,
        proxy={"server": "http://your_proxy_ip:port", "username": "your_username", "password": "your_password"}
    )

Manfaat menggunakan proxy:

  • Penyembunyian IP: proxy menyembunyikan alamat IP asli Anda, sehingga mengurangi kemungkinan diblokir.
  • Distribusi permintaan: dengan merotasi proxy, Anda bisa mendistribusikan permintaan ke berbagai alamat IP yang berbeda, meniru lalu lintas dari beberapa pengguna.
  • Akses konten yang dibatasi: proxy dapat membantu menerobos pembatasan regional atau mengakses konten yang mungkin terbatas pada rentang IP tertentu.

Implementasi ini memastikan aktivitas scraping Anda kecil kemungkinannya untuk terdeteksi dan diblokir oleh mekanisme anti-bot YouTube.

Implementasi kode lengkap

Di bawah ini adalah kode lengkap untuk mengikis data video YouTube menggunakan Playwright dan lxml, termasuk implementasi proxy.

import asyncio
from playwright.async_api import Playwright, async_playwright
from lxml import html
import csv

# Fungsi asinkron untuk menjalankan Playwright dan mengekstrak data
async def run(playwright: Playwright) -> None:
    # Meluncurkan browser tanpa kepala dengan pengaturan proxy
    browser = await playwright.chromium.launch(
        headless=True,
        proxy={"server": "http://your_proxy_ip:port", "username": "your_username", "password": "your_password"}
    )
    context = await browser.new_context()
    page = await context.new_page()

    # Menavigasi ke URL video YouTube
    await page.goto("https://www.youtube.com/watch?v=Ct8Gxo8StBU", wait_until="networkidle")

    # Gulir ke bawah untuk memuat lebih banyak komentar
    for _ in range(20):
        await page.mouse.wheel(0, 200)
        await asyncio.sleep(0.2)
    
    # Memberikan waktu untuk memuat konten tambahan
    await page.wait_for_timeout(1000)
    
    # Mengekstrak konten halaman
    page_content = await page.content()

    # Menutup browser
    await context.close()
    await browser.close()

    # Mengurai konten HTML
    parser = html.fromstring(page_content)

    # Mengekstrak data video
    title = parser.xpath('//div[@id="title"]/h1/yt-formatted-string/text()')[0]
    channel = parser.xpath('//yt-formatted-string[@id="text"]/a/text()')[0]
    channel_link = 'https://www.youtube.com' + parser.xpath('//yt-formatted-string[@id="text"]/a/@href')[0]
    posted = parser.xpath('//yt-formatted-string[@id="info"]/span/text()')[2]
    total_views = parser.xpath('//yt-formatted-string[@id="info"]/span/text()')[0]
    total_comments = parser.xpath('//h2[@id="count"]/yt-formatted-string/span/text()')[0]
    comments_list = parser.xpath('//yt-attributed-string[@id="content-text"]/span/text()')

    # Menyimpan data ke file CSV
    with open('youtube_video_data.csv', 'w', newline='', encoding='utf-8') as file:
        writer = csv.writer(file)
        writer.writerow(["Title", "Channel", "Channel Link", "Posted", "Total Views", "Total Comments", "Comments"])
        writer.writerow([title, channel, channel_link, posted, total_views, total_comments, ", ".join(comments_list)])

# Menjalankan fungsi asinkron
async def main():
    async with async_playwright() as playwright:
        await run(playwright)

asyncio.run(main())

Berikut ini adalah tutorial langkah demi langkah dalam menggunakan Python, Playwright, dan lxml untuk mengikis berbagai data video YouTube, termasuk komentar. Hal ini dilakukan dengan memanfaatkan proxy dan dengan menjalankan kode untuk mensimulasikan perilaku browser untuk mengikis data dinamis secara efektif sambil mematuhi praktik terbaik dalam mengikis. Jika Anda membutuhkan informasi untuk analisis atau membuat dataset, metode tersebut akan membantu Anda dalam mengatasi kesulitan yang dihadapi pada platform youtube.

Komentar:

0 komentar