Wie man YouTube mit Python scrapen kann

Bemerkungen: 0

Das Scraping von Daten aus YouTube kann aufgrund des dynamischen Inhalts und der Anti-Scraping-Maßnahmen eine Herausforderung sein. Mit den richtigen Tools und Techniken können Sie jedoch effizient nützliche Informationen extrahieren. In diesem Artikel führen wir Sie durch den Prozess des Scrapens von YouTube-Videodaten mit Python, Playwright und lxml.

Einrichtung der Umgebung

Installieren Sie die notwendigen Bibliotheken mit pip:

pip install playwright 
pip install lxml

Installieren Sie die Binärdateien des Playwright-Browsers:

playwright install

Um nur die Binärdateien des Chromium-Browsers zu installieren, verwenden Sie den folgenden Befehl:

playwright install chromium

Für das Web-Scraping von YouTube-Daten mit Python werden vor allem die folgenden Bibliotheken benötigt:

  1. Playwright: Eine leistungsstarke Bibliothek zur Automatisierung von Headless Browsern, mit der Sie mit Webseiten interagieren können, als wären Sie ein echter Benutzer;
  2. lxml: Eine schnelle und funktionsreiche Bibliothek zur Verarbeitung von XML und HTML in Python, die XPath zur Abfrage von Dokumenten unterstützt;
  3. CSV-Modul: Eine integrierte Python-Bibliothek zum Speichern von extrahierten Daten in einer CSV-Datei.

Schritt 1: Importieren der erforderlichen Bibliotheken

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

Schritt 2: Kopflose Browser-Automatisierung

Starten Sie einen Headless-Browser mit Playwright, rufen Sie die URL des YouTube-Videos auf, und warten Sie, bis die Seite vollständig geladen ist.

Scrollen Sie die Seite, um weitere Kommentare zu laden.

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

# Navigieren zur URL des YouTube-Videos
await page.goto("https://www.youtube.com/watch?v=Ct8Gxo8StBU", wait_until="networkidle")

# Nach unten scrollen, um weitere Kommentare zu laden
for _ in range(20):
    await page.mouse.wheel(0, 200)
    await asyncio.sleep(0.2)

# Zeit für das Laden zusätzlicher Inhalte gewähren
await page.wait_for_timeout(1000)

Schritt 3: Parsen des HTML-Inhalts

Extrahieren Sie den HTML-Inhalt der Seite mit Playwright und parsen Sie ihn mit lxml.

# Extrahieren des Seiteninhalts
page_content = await page.content()

# Parsen des HTML-Inhalts
parser = html.fromstring(page_content)

Schritt 4: Datenextraktion

Extrahieren Sie die erforderlichen Datenpunkte (z. B. Titel, Kanal, Kommentare) mithilfe von XPath-Ausdrücken.

Sammeln aller relevanten Daten, einschließlich Video-Metadaten und Kommentare.

# Extrahieren von Videodaten
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()')

Schritt 5: Speichern der Daten

Speichern Sie die extrahierten Daten in einer CSV-Datei zur einfachen Analyse und Speicherung.

# Speichern der Daten in einer CSV-Datei
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-Implementierung

Proxys spielen beim Web Scraping eine entscheidende Rolle, vor allem wenn es um die Extraktion von Daten in großem Umfang oder um Websites mit strengen Anti-Bot-Maßnahmen wie YouTube geht. Hier sehen Sie, wie Proxys im Playwright-Skript implementiert sind:

Proxy-Einrichtung:

  1. Der Proxy-Parameter in playwright.chromium.launch() wird verwendet, um den gesamten Browserverkehr über einen angegebenen Proxy-Server zu leiten.
  2. Die Details des Proxyservers, einschließlich der Serveradresse, des Benutzernamens und des Passworts, müssen konfiguriert werden.

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

Vorteile der Verwendung von Proxys:

  • IP-Maskierung: Proxys verbergen Ihre ursprüngliche IP-Adresse und verringern so die Wahrscheinlichkeit, blockiert zu werden.
  • Verteilung von Anfragen: Durch die Rotation von Proxys können Sie Anfragen auf verschiedene IP-Adressen verteilen und so den Datenverkehr von mehreren Nutzern imitieren.
  • Zugriff auf eingeschränkte Inhalte: Proxys können dabei helfen, regionale Beschränkungen zu umgehen oder auf Inhalte zuzugreifen, die möglicherweise auf bestimmte IP-Bereiche beschränkt sind.

Diese Implementierung stellt sicher, dass Ihre Scraping-Aktivitäten weniger wahrscheinlich von den Anti-Bot-Mechanismen von YouTube entdeckt und blockiert werden.

Komplette Code-Implementierung

Im Folgenden finden Sie den vollständigen Code zum Scrapen von YouTube-Videodaten mit Playwright und lxml, einschließlich der Proxy-Implementierung.

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

# Asynchrone Funktion zur Ausführung von Playwright und zum Extrahieren von Daten
async def run(playwright: Playwright) -> None:
    # Starten eines Headless-Browsers mit Proxy-Einstellungen
    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()

    # Navigieren zur URL des YouTube-Videos
    await page.goto("https://www.youtube.com/watch?v=Ct8Gxo8StBU", wait_until="networkidle")

    # Nach unten scrollen, um weitere Kommentare zu laden
    for _ in range(20):
        await page.mouse.wheel(0, 200)
        await asyncio.sleep(0.2)
    
    # Zeit für das Laden zusätzlicher Inhalte gewähren
    await page.wait_for_timeout(1000)
    
    # Extrahieren des Seiteninhalts
    page_content = await page.content()

    # Browser schließen
    await context.close()
    await browser.close()

    # Parsen des HTML-Inhalts
    parser = html.fromstring(page_content)

    # Extrahieren von Videodaten
    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()')

    # Speichern der Daten in einer CSV-Datei
    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)])

# Ausführen der asynchronen Funktion
async def main():
    async with async_playwright() as playwright:
        await run(playwright)

asyncio.run(main())

Hier finden Sie eine Schritt-für-Schritt-Anleitung zur Verwendung von Python, Playwright und lxml zum Scrapen verschiedener YouTube-Videodaten, einschließlich Kommentaren. Dazu werden Proxys verwendet und Code ausgeführt, der das Verhalten von Browsern simuliert, um dynamische Daten effektiv zu scrapen und gleichzeitig die besten Praktiken beim Scraping zu befolgen. Wenn Sie Informationen für die Analyse oder die Erstellung von Datensätzen benötigen, helfen Ihnen diese Methoden bei der Überwindung von Schwierigkeiten auf der YouTube-Plattform.

Bemerkungen:

0 Bemerkungen