¿Cómo extraer datos de youtube en Python?

Prerrequisitos: Beautifulsoup

Las estadísticas de YouTube de un canal de YouTube se pueden usar para el análisis y también se pueden extraer usando el código python. Se pueden recuperar muchos datos como viewCount, subscriberCount y videoCount. Este artículo analiza 2 formas en que se puede hacer.

Método 1: usar la API de YouTube

Primero necesitamos generar una clave API. Necesita una cuenta de Google para acceder a la Consola API de Google, solicitar una clave API y registrar su aplicación. Puede usar la página de API de Google para hacerlo.

Para extraer datos, necesitamos la identificación del canal de YouTube cuyas estadísticas queremos ver. Para obtener la identificación del canal, visite ese canal de YouTube en particular y copie la última parte de la URL (en los ejemplos que se dan a continuación, se usa la identificación del canal GeeksForGeeks). 

Acercarse

  • Primero crea youtube_statistics.py 
  • En este archivo, extraiga datos usando la clase YTstats y genere un archivo json con todos los datos extraídos.
  • Ahora crea main.py
  • En la importación principal youtube_statistics.py
  • Agregue la clave API y la identificación del canal
  • Ahora, utilizando el primer archivo, los datos correspondientes a la clave proporcionada se recuperarán y guardarán en el archivo json.

Ejemplo :

Código para el archivo main.py:

Python3

from youtube_statistics import YTstats
  
# paste the API key generated by you here
API_KEY = "AIzaSyA-0KfpLK04NpQN1XghxhSlzG-WkC3DHLs"
  
 # paste the channel id here
channel_id = "UC0RhatS1pyxInC00YKjjBqQ" 
  
yt = YTstats(API_KEY, channel_id)
yt.get_channel_statistics()
yt.dump()

Código para el archivo youtube_statistics.py:

Python3

import requests
import json
  
  
class YTstats:
  
    def __init__(self, api_key, channel_id):
        self.api_key = api_key
        self.channel_id = channel_id
        self.channel_statistics = None
  
    def get_channel_statistics(self):
        url = f'https://www.googleapis.com/youtube/v3/channels?part=statistics&id={self.channel_id}&key={self.api_key}'
  
        json_url = requests.get(url)
        data = json.loads(json_url.text)
  
        try:
            data = data["items"][0]["statistics"]
        except:
            data = None
  
        self.channel_statistics = data
        return data
  
    def dump(self):
        if self.channel_statistics is None:
            return
  
        channel_title = "GeeksForGeeks"
        channel_title = channel_title.replace(" ", "_").lower()
  
        # generate a json file with all the statistics data of the youtube channel
        file_name = channel_title + '.json'
        with open(file_name, 'w') as f:
            json.dump(self.channel_statistics, f, indent=4)
        print('file dumped')

Producción:

Método 2: Usando BeautifulSoup

Beautiful Soup es una biblioteca de Python para extraer datos de archivos HTML y XML. En este enfoque, usaremos BeautifulSoup y Selenium para extraer datos de los canales de YouTube. Este programa indicará las vistas, el tiempo desde la publicación, el título y las URL de los videos y los imprimirá usando el formato de Python.

Acercarse

  • Módulo de importación
  • Proporcione la URL del canal cuyos datos se van a buscar
  • Extraer datos
  • Mostrar los datos obtenidos.

Ejemplo:

Python3

# import required packages
from selenium import webdriver
from bs4 import BeautifulSoup
  
# provide the url of the channel whose data you want to fetch
urls = [
    'https://www.youtube.com/channel/UC0RhatS1pyxInC00YKjjBqQ'
]
  
  
def main():
    driver = webdriver.Chrome()
    for url in urls:
        driver.get('{}/videos?view=0&sort=p&flow=grid'.format(url))
        content = driver.page_source.encode('utf-8').strip()
        soup = BeautifulSoup(content, 'lxml')
        titles = soup.findAll('a', id='video-title')
        views = soup.findAll(
            'span', class_='style-scope ytd-grid-video-renderer')
        video_urls = soup.findAll('a', id='video-title')
        print('Channel: {}'.format(url))
        i = 0  # views and time
        j = 0  # urls
        for title in titles[:10]:
            print('\n{}\t{}\t{}\thttps://www.youtube.com{}'.format(title.text,
                                                                   views[i].text, views[i+1].text, video_urls[j].get('href')))
            i += 2
            j += 1
  
  
main()

Producción

Publicación traducida automáticamente

Artículo escrito por pawki y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *