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.
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:
import asyncio
from playwright.async_api import Playwright, async_playwright
from lxml import html
import csv
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)
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)
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()')
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)])
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:
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:
Ta implementacja zapewnia mniejsze prawdopodobieństwo wykrycia i zablokowania działań związanych ze skrobaniem przez mechanizmy antybotowe YouTube.
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