Como capturar comentários do Youtube usando Python

Guilherme Gomes
Data Hackers
Published in
3 min readNov 2, 2020

Olá pessoal! Tudo bem com vocês?

Este é o primeiro texto de uma série onde eu quero mostrar todo o processo de um projeto de ciência de dados. Começando pela coleta de informações e terminando na visualização.

Série de textos:

01. Como capturar comentários do Youtube usando Python

02. Guia inicial de pré-processamento de texto utilizando Python

03. Text Analytics (NLP) utilizando Python

04. Como carregar um dataframe Pandas no Google BigQuery

05. 4 dicas de visualização de dados

Desenvolvi essa etapa do projeto tendo como base esse artigo, escrito por François St-Amant. Com a autorização do autor, eu traduzi o artigo para o português e adaptei o código para a minha aplicação.

A primeira etapa de um projeto de NLP (Processamento de Linguagem Natural) é ter um dataset. Nesse projeto eu capturei comentários de vídeos do Youtube, mais especificamente de um canal de churrasco!

Escolhi o canal Lion BBQ porque a ideia é capturar todos os comentários de todos os vídeos, dessa forma por ser um canal relativamente pequeno, foi mais rápido a coleta dos dados.

Primeiramente, não esqueça de instalar o ChromeDrive, para mais informações acesse aqui. Após a instalação, essas serão as bibliotecas que vamos utilizar:

import timefrom selenium.webdriver import Chromefrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysfrom selenium.webdriver.support.ui import WebDriverWaitfrom selenium.webdriver.support import expected_conditions as EC

Todos os módulos são necessários porque os comentários do Youtube são carregados de maneira dinâmica, ou seja, só são possíveis de ver quando rolamos o mouse para baixo. Dessa maneira, precisamos executar os seguintes passos:

  • Carregar a página
  • Rolar para baixo
  • Esperar o comentário aparecer
  • Repetir o processo quantas vezes for necessário

Para esse projeto precisamos executar as seguintes etapas:

1. Capturar todos títulos e urls de um canal

def get_url_video(url_channel):urls = []video_titles = []with Chrome(‘/home/guilherme.gomes/chromedriver’) as driver:wait = WebDriverWait(driver,50)driver.get(url_channel)for item in range(10):wait.until(EC.visibility_of_element_located((By.TAG_NAME, “body”))).send_keys(Keys.END)time.sleep(15)for video_title in wait.until(EC.presence_of_all_elements_located((By.ID, “video-title”))):video_titles.append(video_title.text)print(f’Título do vídeo: {video_title.text}’)for url in driver.find_elements_by_css_selector(“#video-title”):urls.append(url.get_attribute(‘href’))print(f’URL: {url.get_attribute(“href”)}’)df = pd.DataFrame(video_titles, columns=[‘video_title’])df[‘url’] = urlsreturn (df)

2. Capturar todos os comentários de um vídeo

def get_video_comment(video):comments=[]authors = []with Chrome(‘/home/guilherme.gomes/chromedriver’) as driver:wait = WebDriverWait(driver,50)driver.get(video)for item in range(15):wait.until(EC.visibility_of_element_located((By.TAG_NAME, “body”))).send_keys(Keys.END)if count == 0:driver.execute_script(“window.scrollTo(0, 400);”)time.sleep(30)time.sleep(30)for comment in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, “#content-text”))):comments.append(comment.text)print(f’Comentário: {comment.text}’)for author in wait.until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, “#author-text”))):authors.append(author.text)print(f’Autor: {author.text}’)df = pd.DataFrame(comments, columns=[‘comment’])df[‘author’] = authorsreturn df

Entenda como funciona:

  1. Acesse a URL que você deseja com o driver.get function.
  2. Role o mouse para baixo e espere até tudo estar visível com wait.until e EC.visibility_of_element_located.
  3. Capture os dados que deseja utilizando a TAG_NAME ou ID do HTML da página.
  4. Salve os dados coletados em uma lista
  5. Adicione à lista de dados em um dataframe Pandas

3. Captura de todos os dados

O último passo é conseguir coletar todos os comentários de um canal, para isso eu utilizei os dois códigos acima e também o seguinte:

def youtube_crawler(url_channel, folder):df_youtube_videos = get_url_video(url_channel)df_youtube_videos.to_csv(f’datalake/{folder}/youtube_videos.csv’)df_youtube_videos= pd.read_csv(f’datalake/{folder}/youtube_videos.csv’)youtube_video_list = df_youtube_videos.url.tolist()name_video_list = df_youtube_videos.video_title.tolist()count = 0for youtube_video in youtube_video_list:print(f’{count} — vídeo: {youtube_video}’)df_coments = get_video_comment(video=youtube_video)df_coments.to_csv(f’datalake/raw/{folder}/coments_of_{name_video_list[count]}.csv’)count = count+1dataframe_youtube_video = pd.read_csv(f’datalake/raw/{folder}/youtube_videos.csv’)lista = video_list(dataframe_youtube_video[‘video_title’])data = concat_df(lista)data.to_csv(f’datalake/raw/{folder}/data_full_{folder}.csv’)return data

Esse código salva em pastas locais os dados, para isso é necessário ter elas criadas dentro do seu computador. Por fim ele salva todos os dados em um único dataframe.

Conclusão

Sem dúvida alguma o Selenium é uma ferramenta muito poderosa para coletar dados de páginas, espero que a tradução e adaptação deste artigo facilite o seu estudo sobre a ferramenta. Caso tenha alguma dúvida sobre o funcionamento do código, recomendo que acesse meu github ou entre em contato comigo linkedin.

Nos próximos artigos vou mostrar as próximas etapas, muito obrigado se você leu até aqui! Até a próxima!

Série de textos:

01. Como capturar comentários do Youtube usando Python

02. Guia inicial de pré-processamento de texto utilizando Python

03. Text Analytics (NLP) utilizando Python

04. Como carregar um dataframe Pandas no Google BigQuery

05. 4 dicas de visualização de dados

--

--

Guilherme Gomes
Guilherme Gomes

Written by Guilherme Gomes

Profissional da área de dados, apaixonado por produtos digitais e hambúrguer.