Comment récupérer des données sur YouTube en utilisant Python

Commentaires: 0

L'extraction de données de YouTube peut s'avérer difficile en raison de son contenu dynamique et des mesures anti-scraping. Cependant, avec les bons outils et les bonnes techniques, vous pouvez extraire efficacement des informations utiles. Dans cet article, nous allons vous guider à travers le processus de récupération des données vidéo de YouTube à l'aide de Python, Playwright et lxml.

Configuration de l'environnement

Installez les bibliothèques nécessaires à l'aide de pip :

pip install playwright 
pip install lxml

Installez les binaires du navigateur Playwright :

playwright install

Pour installer les binaires du navigateur Chromium, utilisez la commande suivante :

playwright install chromium

Pour le web scraping de données YouTube avec Python, vous aurez principalement besoin des bibliothèques suivantes :

  1. Playwright : Une bibliothèque puissante pour automatiser les navigateurs sans tête, vous permettant d'interagir avec les pages web comme si vous étiez un véritable utilisateur ;
  2. lxml : Une bibliothèque rapide et riche en fonctionnalités pour traiter XML et HTML en Python, supportant XPath pour l'interrogation des documents ;
  3. Module CSV : Une bibliothèque Python intégrée pour enregistrer les données extraites dans un fichier CSV.

Étape 1 : Importer les bibliothèques requises

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

Étape 2 : Automatisation du navigateur sans tête

Lancez un navigateur sans tête avec Playwright, naviguez jusqu'à l'URL de la vidéo YouTube et attendez le chargement complet de la page.

Faites défiler la page pour afficher d'autres commentaires.

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

# Naviguer vers l'URL de la vidéo YouTube
await page.goto("https://www.youtube.com/watch?v=Ct8Gxo8StBU", wait_until="networkidle")

# Défiler vers le bas pour lire d'autres commentaires
for _ in range(20):
    await page.mouse.wheel(0, 200)
    await asyncio.sleep(0.2)

# Donner un peu de temps pour le chargement du contenu supplémentaire
await page.wait_for_timeout(1000)

Étape 3 : Analyse du contenu HTML

Extraire le contenu HTML de la page à l'aide de Playwright et l'analyser avec lxml.

# Extraction du contenu de la page
page_content = await page.content()

# Analyse du contenu HTML
parser = html.fromstring(page_content)

Etape 4 : Extraction des données

Extrayez les points de données requis (par exemple, titre, canal, commentaires) à l'aide d'expressions XPath.

Collectez toutes les données pertinentes, y compris les métadonnées vidéo et les commentaires.

# Extraction de données vidéo
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()')

Etape 5 : Sauvegarde des données

Enregistrez les données extraites dans un fichier CSV pour faciliter l'analyse et le stockage.

# Enregistrement des données dans un fichier 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)])

Mise en œuvre d'un proxy

Les proxys jouent un rôle crucial dans le web scraping, en particulier lorsqu'il s'agit d'extraction de données à grande échelle ou de sites avec des mesures anti-bots strictes comme YouTube. Voici comment les proxys sont mis en œuvre dans le script Playwright :

Configuration du proxy :

  1. Le paramètre proxy dans playwright.chromium.launch() est utilisé pour acheminer tout le trafic du navigateur via un serveur proxy spécifié.
  2. Les détails du serveur proxy, notamment l'adresse du serveur, le nom d'utilisateur et le mot de passe, doivent être configurés.

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

Avantages de l'utilisation des mandataires :

  • Masquage de l'adresse IP : les proxys masquent votre adresse IP d'origine, ce qui réduit la probabilité d'être bloqué.
  • Répartition des demandes : la rotation des serveurs mandataires permet de répartir les demandes sur différentes adresses IP, imitant ainsi le trafic de plusieurs utilisateurs.
  • Accès à des contenus restreints : les proxys peuvent aider à contourner les restrictions régionales ou à accéder à des contenus qui pourraient être limités à certaines plages d'adresses IP.

Cette mise en œuvre garantit que vos activités de scraping sont moins susceptibles d'être détectées et bloquées par les mécanismes anti-bots de YouTube.

Mise en œuvre complète du code

Vous trouverez ci-dessous le code complet pour récupérer les données vidéo de YouTube à l'aide de Playwright et de lxml, y compris la mise en œuvre du proxy.

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

# Fonction asynchrone pour exécuter Playwright et extraire les données
async def run(playwright: Playwright) -> None:
    # Lancement d'un navigateur sans tête avec des paramètres de 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()

    # Naviguer vers l'URL de la vidéo YouTube
    await page.goto("https://www.youtube.com/watch?v=Ct8Gxo8StBU", wait_until="networkidle")

    # Défiler vers le bas pour lire d'autres commentaires
    for _ in range(20):
        await page.mouse.wheel(0, 200)
        await asyncio.sleep(0.2)
    
    # Donner un peu de temps pour le chargement du contenu supplémentaire
    await page.wait_for_timeout(1000)
    
    # Extraction du contenu de la page
    page_content = await page.content()

    # Fermeture du navigateur
    await context.close()
    await browser.close()

    # Analyse du contenu HTML
    parser = html.fromstring(page_content)

    # Extraction de données vidéo
    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()')

    # Enregistrement des données dans un fichier 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)])

# Exécution de la fonction asynchrone
async def main():
    async with async_playwright() as playwright:
        await run(playwright)

asyncio.run(main())

Voici un tutoriel étape par étape sur l'utilisation de Python, Playwright, et lxml pour récupérer diverses données de vidéos YouTube, y compris les commentaires. Pour ce faire, on utilise des proxys et on exécute du code pour simuler le comportement des navigateurs afin de récupérer des données dynamiques de manière efficace tout en respectant les meilleures pratiques en matière de récupération. Si vous avez besoin d'informations à des fins d'analyse ou pour créer des ensembles de données, ces méthodes vous aideront à surmonter les difficultés rencontrées sur la plateforme YouTube.

Commentaires:

0 Commentaires