Python kullanarak YouTube nasıl kazınır? Adım adım kılavuz

Yorumlar: 0

YouTube'dan veri kazımak, dinamik içeriği ve kazıma karşıtı önlemleri nedeniyle zor olabilir. Ancak, doğru araçlar ve tekniklerle, yararlı bilgileri verimli bir şekilde çıkarabilirsiniz. Bu makalede, Python, Playwright ve lxml kullanarak YouTube video verilerini kazıma sürecinde size yol göstereceğiz.

Ortam kurulumu

Pip kullanarak gerekli kütüphaneleri yükleyin:

pip install playwright 
pip install lxml

Install the Playwright browser binaries:

playwright install

To just install Chromium browser binaries use the following command:

playwright install chromium

YouTube verilerini Python ile web kazıma için öncelikle aşağıdaki kütüphanelere ihtiyacınız olacaktır:

  1. Playwright: Başlıksız tarayıcıları otomatikleştirmek için güçlü bir kütüphane, web sayfalarıyla gerçek bir kullanıcıymışsınız gibi etkileşim kurmanızı sağlar;
  2. lxml: Python'da XML ve HTML işlemek için hızlı ve zengin özelliklere sahip bir kütüphane, belgeleri sorgulamak için XPath desteği;
  3. CSV Modülü: Çıkarılan verileri bir CSV dosyasına kaydetmek için yerleşik bir Python kütüphanesi.

Adım 1: Gerekli kütüphaneleri içe aktarın

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

Adım 2: Başlıksız tarayıcı otomasyonu

Playwright ile başsız bir tarayıcı başlatın, YouTube video URL'sine gidin ve sayfanın tamamen yüklenmesini bekleyin.

Daha fazla yorum yüklemek için sayfayı kaydırın.

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

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

# Daha fazla yorum yüklemek için aşağı kaydırın
for _ in range(20):
    await page.mouse.wheel(0, 200)
    await asyncio.sleep(0.2)

# Ek içeriğin yüklenmesi için biraz zaman tanıma
await page.wait_for_timeout(1000)

Adım 3: HTML içeriği ayrıştırma

Playwright kullanarak sayfanın HTML içeriğini ayıklayın ve lxml ile ayrıştırın.

# Sayfa içeriğinin çıkarılması
page_content = await page.content()

# HTML içeriğini ayrıştırma
parser = html.fromstring(page_content)

Adım 4: Veri çıkarma

XPath ifadelerini kullanarak gerekli veri noktalarını (örn. başlık, kanal, yorumlar) ayıklayın.

Video meta verileri ve yorumlar dahil olmak üzere ilgili tüm verileri toplayın.

# Video verilerini ayıklama
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()')

Adım 5: Verileri kaydetme

Kolay analiz ve depolama için çıkarılan verileri bir CSV dosyasına kaydedin.

# Verileri bir CSV dosyasına kaydetme
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)])

Proxy uygulaması

Proxy'ler, özellikle büyük ölçekli veri çıkarma işlemlerinde veya YouTube gibi sıkı anti-bot önlemleri olan sitelerde web kazıma işleminde çok önemli bir rol oynar. Playwright komut dosyasında proxy'lerin nasıl uygulandığı aşağıda açıklanmıştır:

Proxy kurulumu:

  1. playwright.chromium.launch() içindeki proxy parametresi, tüm tarayıcı trafiğini belirtilen bir proxy sunucusu üzerinden yönlendirmek için kullanılır.
  2. Sunucu adresi, kullanıcı adı ve parola dahil olmak üzere proxy sunucusu ayrıntıları yapılandırılmalıdır.

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

Proxy kullanmanın faydaları:

  • IP maskeleme: proxy'ler orijinal IP adresinizi gizleyerek engellenme olasılığınızı azaltır.
  • İstek dağıtımı: proxy'leri döndürerek, istekleri farklı IP adreslerine dağıtabilir ve birden fazla kullanıcıdan gelen trafiği taklit edebilirsiniz.
  • Kısıtlı içeriğe erişim: proxy'ler bölgesel kısıtlamaları aşmaya veya belirli IP aralıklarıyla sınırlı olabilecek içeriğe erişmeye yardımcı olabilir.

Bu uygulama, kazıma faaliyetlerinizin YouTube'un anti-bot mekanizmaları tarafından tespit edilme ve engellenme olasılığının daha düşük olmasını sağlar.

Tamamlanmış kod uygulaması

Aşağıda, Playwright ve lxml kullanarak YouTube video verilerini kazımak için proxy uygulaması da dahil olmak üzere tam kod bulunmaktadır.

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

# Playwright'ı çalıştırmak ve verileri ayıklamak için eşzamansız işlev
async def run(playwright: Playwright) -> None:
    # Proxy ayarlarıyla başsız tarayıcı başlatma
    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()

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

    # Daha fazla yorum yüklemek için aşağı kaydırın
    for _ in range(20):
        await page.mouse.wheel(0, 200)
        await asyncio.sleep(0.2)
    
    # Ek içeriğin yüklenmesi için biraz zaman tanıma
    await page.wait_for_timeout(1000)
    
    # Sayfa içeriğinin çıkarılması
    page_content = await page.content()

    # Tarayıcıyı kapatma
    await context.close()
    await browser.close()

    # HTML içeriğini ayrıştırma
    parser = html.fromstring(page_content)

    # Video verilerini ayıklama
    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()')

    # Verileri bir CSV dosyasına kaydetme
    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)])

# Eşzamansız işlevi çalıştırma
async def main():
    async with async_playwright() as playwright:
        await run(playwright)

asyncio.run(main())

Yorumlar da dahil olmak üzere çeşitli YouTube video verilerini kazımak için Python, Playwright ve lxml kullanımına ilişkin adım adım bir öğretici. Bu, kazıma işlemindeki en iyi uygulamalara uyarken dinamik verileri etkili bir şekilde kazımak için proxy'ler kullanılarak ve tarayıcıların davranışını simüle etmek için kod çalıştırılarak yapılır. Analiz için bilgiye ihtiyacınız varsa veya veri kümeleri oluşturuyorsanız, bu tür yöntemler youtube platformunda karşılaştığınız zorlukların üstesinden gelmenize yardımcı olacaktır.

Yorumlar:

0 yorumlar