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.
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:
import asyncio
from playwright.async_api import Playwright, async_playwright
from lxml import html
import csv
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)
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)
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()')
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)])
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:
browser = await playwright.chromium.launch(
headless=True,
proxy={"server": "http://your_proxy_ip:port", "username": "your_username", "password": "your_password"}
)
Manfaat menggunakan proxy:
Implementasi ini memastikan aktivitas scraping Anda kecil kemungkinannya untuk terdeteksi dan diblokir oleh mekanisme anti-bot YouTube.
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