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.

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