Jak skrobać YouTube za pomocą Pythona

Komentarze: 0

Skrobanie danych z YouTube może być trudne ze względu na jego dynamiczną zawartość i środki zapobiegające skrobaniu. Jednak dzięki odpowiednim narzędziom i technikom można skutecznie wyodrębnić przydatne informacje. W tym artykule przeprowadzimy Cię przez proces skrobania danych wideo z YouTube przy użyciu Python, Playwright i lxml.

Zrozumienie struktury danych w celu skrobania Youtube za pomocą Pythona

Zanim dowiemy się, jak skrobać YouTube, musimy zrozumieć jego strukturę. Ma tak wiele dostępnych funkcji, które mają nieskończoną liczbę typów danych do wyboru w odniesieniu do aktywności użytkowników i statystyk wideo. Niektóre kluczowe parametry platformy obejmują tytuły i opisy filmów, dodane tagi, liczbę wyświetleń, polubień i komentarzy, a także informacje o kanale i liście odtwarzania. Elementy te są istotne dla marketerów treści i twórców w celu oceny wydajności filmów i planowania strategii formułowania treści wideo.

Dzięki YouTube Data API deweloperzy mogą uzyskać dostęp do większości wskaźników programowo. Interfejs API umożliwia również dostęp do liczby subskrybentów, a także filmów na kanale, co zapewnia dużą ilość danych do celów analizy i integracji.

Jednak mogą istnieć pewne szczególne elementy, których nie można uzyskać za pośrednictwem interfejsu API, a zatem można je pobrać tylko za pomocą skrobania stron internetowych. Na przykład, uzyskanie szczegółowych danych dotyczących zaangażowania widzów, takich jak sentyment ich komentarzy lub konkretny czas, w którym się zaangażowali, wymagałoby pewnych podejść do skrobania stron Youtube. Technika ta jest zwykle bardziej skomplikowana i może wiązać się z ryzykiem związanym z ciągle ewoluującą renderowaną treścią platformy, a także z ich surowymi przepisami dotyczącymi skrobania danych.

W poniższych blokach pokażemy, jak zbudować skrypt i jak skutecznie skrobać dane z Youtube w Pythonie.

Korzystanie z serwerów proxy w celu uniknięcia wykrycia podczas skrobania YouTube

Aby skrobać filmy z Youtube za pomocą Pythona, korzystanie z serwerów proxy jest niezbędne do uniknięcia zakazów IP i metod zapobiegania botom. Oto kilka typów i ich opisy:

  1. Rezydencyjne serwery proxy są połączone z prawdziwymi adresami IP i są używane jako autentyczne połączenia ze stronami internetowymi. Do skrobania danych z Youtube, gdzie zaufanie jest wymagane w dużym stopniu, aby nie zostać złapanym, proxy są najlepszą opcją. Umożliwiają one scraperowi zachowywanie się jak prawdziwy użytkownik, dzięki czemu szanse na wykrycie go jako bota są zminimalizowane.
  2. Serwery proxy ISP stanowią pośrednie rozwiązanie między adresami IP użytkowników indywidualnych a serwerami proxy centrów danych. Są one dostarczane przez dostawców usług internetowych, którzy wydają autentyczne adresy IP, które są bardzo trudne do oznaczenia jako serwery proxy. Ta cecha sprawia, że serwery proxy ISP są bardzo skuteczne w przypadkach, gdy trzeba zeskrobać wyniki wyszukiwania Youtube, które wymagają zarówno autentyczności, jak i wyjątkowej wydajności.
  3. Mimo że centra danych oferują najwyższe prędkości, mogą być łatwo zidentyfikowane przez platformy takie jak YouTube, ponieważ pochodzą z dużych centrów danych. Ryzyko zablokowania podczas skrobania jest wysokie, mimo że są one wydajne i łatwe w użyciu. Te typy są najlepsze, gdy potrzeba szybkiego przetwarzania danych przeważa nad ryzykiem związanym z ich wykryciem.
  4. Mobilne serwery proxy zapewniają najbardziej legalne rozwiązanie ze względu na kierowanie połączeń przez urządzenia mobilne w sieciach komórkowych. Ich wykorzystanie do zadań skrobania jest najbardziej efektywne, ponieważ jest mniej prawdopodobne, że zostaną zablokowane, ponieważ mobilne adresy IP są często rotowane przez dostawców usług, dzięki czemu mobilne serwery proxy są znacznie mniej narażone na oflagowanie. Należy jednak zauważyć, że ich prędkość może być znacznie niższa niż w przypadku innych typów.

Korzystając z tych typów strategicznie, możliwe jest skrobanie danych z Youtube bez wykrycia, co pozwala na ciągły dostęp do danych przy jednoczesnym przestrzeganiu Warunków korzystania z usługi platformy. Ponadto ich właściwe zrozumienie bardzo pomoże, gdy będziesz musiał znaleźć pełnomocnik do skrobania.

Konfiguracja środowiska

Zainstaluj niezbędne biblioteki za pomocą pip:

pip install playwright 
pip install lxml

Zainstaluj pliki binarne przeglądarki Playwright:

playwright install

Aby po prostu zainstalować pliki binarne przeglądarki Chromium, użyj następującego polecenia:

playwright install chromium

Do skrobania danych z YouTube za pomocą Pythona potrzebne będą przede wszystkim następujące biblioteki:

  1. Playwright: Potężna biblioteka do automatyzacji przeglądarek bezgłowych, umożliwiająca interakcję ze stronami internetowymi tak, jakbyś był prawdziwym użytkownikiem;
  2. lxml: Szybka i bogata w funkcje biblioteka do przetwarzania XML i HTML w Pythonie, obsługująca XPath do odpytywania dokumentów;
  3. Moduł CSV: Wbudowana biblioteka Pythona do zapisywania wyodrębnionych danych do pliku CSV.

Krok 1: Import wymaganych bibliotek

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

Krok 2: Bezgłowa automatyzacja przeglądarki

Uruchom bezgłową przeglądarkę z Playwright, przejdź do adresu URL wideo YouTube i poczekaj na pełne załadowanie strony.

Przewiń stronę, aby załadować więcej komentarzy.

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

# Przejście do adresu URL filmu w serwisie YouTube
await page.goto("https://www.youtube.com/watch?v=Ct8Gxo8StBU", wait_until="networkidle")

# Przewijanie w dół, aby załadować więcej komentarzy
for _ in range(20):
    await page.mouse.wheel(0, 200)
    await asyncio.sleep(0.2)

# Daje trochę czasu na załadowanie dodatkowej zawartości
await page.wait_for_timeout(1000)

Krok 3: Parsowanie zawartości HTML

Wyodrębnij zawartość HTML strony za pomocą Playwright i przeanalizuj ją za pomocą lxml.

# Wyodrębnianie zawartości strony
page_content = await page.content()

# Analizowanie zawartości HTML
parser = html.fromstring(page_content)

Krok 4: Ekstrakcja danych

Wyodrębnij wymagane punkty danych (np. tytuł, kanał, komentarze) za pomocą wyrażeń XPath.

Zbierz wszystkie istotne dane, w tym metadane wideo i komentarze.

# Wyodrębnianie danych wideo
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()')

Krok 5: Zapisywanie danych

Zapisz wyodrębnione dane w pliku CSV w celu łatwej analizy i przechowywania.

# Zapisywanie danych do pliku 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)])

Implementacja proxy

Serwery proxy odgrywają kluczową rolę w skrobaniu stron internetowych, szczególnie w przypadku ekstrakcji danych na dużą skalę lub witryn z surowymi środkami antybotowymi, takimi jak YouTube. Oto jak proxy są zaimplementowane w skrypcie Playwright:

Konfiguracja serwera proxy:

  1. Parametr proxy w playwright.chromium.launch() służy do kierowania całego ruchu przeglądarki przez określony serwer proxy.
  2. Szczegóły serwera proxy, w tym adres serwera, nazwa użytkownika i hasło, muszą być skonfigurowane.

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

Korzyści z używania proxy:

  • Maskowanie adresu IP: serwery proxy ukrywają oryginalny adres IP, zmniejszając prawdopodobieństwo zablokowania.
  • Dystrybucja żądań: poprzez rotację serwerów proxy można rozdzielać żądania na różne adresy IP, naśladując ruch od wielu użytkowników.
  • Dostęp do treści o ograniczonym dostępie: serwery proxy mogą pomóc ominąć ograniczenia regionalne lub uzyskać dostęp do treści, które mogą być ograniczone do określonych zakresów adresów IP.

Ta implementacja zapewnia mniejsze prawdopodobieństwo wykrycia i zablokowania działań związanych ze skrobaniem przez mechanizmy antybotowe YouTube.

Kompletna implementacja kodu

Poniżej znajduje się kompletny kod do skrobania danych wideo z YouTube przy użyciu Playwright i lxml, w tym implementacja proxy.

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

# Funkcja asynchroniczna do uruchamiania Playwright i wyodrębniania danych
async def run(playwright: Playwright) -> None:
    # Uruchamianie przeglądarki bezgłowej z ustawieniami 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()

    # Przejście do adresu URL filmu w serwisie YouTube
    await page.goto("https://www.youtube.com/watch?v=Ct8Gxo8StBU", wait_until="networkidle")

    # Przewijanie w dół, aby załadować więcej komentarzy
    for _ in range(20):
        await page.mouse.wheel(0, 200)
        await asyncio.sleep(0.2)
    
    # Daje trochę czasu na załadowanie dodatkowej zawartości
    await page.wait_for_timeout(1000)
    
    # Wyodrębnianie zawartości strony
    page_content = await page.content()

    # Zamykanie przeglądarki
    await context.close()
    await browser.close()

    # Analizowanie zawartości HTML
    parser = html.fromstring(page_content)

    # Wyodrębnianie danych wideo
    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()')

    # Zapisywanie danych do pliku 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)])

# Uruchamianie funkcji asynchronicznej
async def main():
    async with async_playwright() as playwright:
        await run(playwright)

asyncio.run(main())

Oto samouczek krok po kroku dotyczący korzystania z Pythona, Playwright i lxml do skrobania różnych danych wideo z YouTube, w tym komentarzy. Odbywa się to poprzez wykorzystanie serwerów proxy i uruchomienie kodu symulującego zachowanie przeglądarek w celu skutecznego skrobania dynamicznych danych przy jednoczesnym przestrzeganiu najlepszych praktyk w zakresie skrobania. Jeśli potrzebujesz informacji do analizy lub tworzenia zestawów danych, takie metody pomogą Ci przezwyciężyć trudności napotykane na platformie YouTube.

Komentarze:

0 komentarze