coleta de informações do twitter para persistência em - PUC-Rio

Propaganda
Departamento de Informática
Coleta de Informações do Twitter para Persistência em
Banco de Dados: Pesquisas de Opinião e Análise Sentimental
Aluno: Maria Beatriz Ribeiro Vaz
Orientador: Sérgio Lifschitz
Introdução
Há uma grande quantidade de informação na internet, porém uma parte significativa
desses dados não está em formatos bem estruturados de onde seria fácil extrair informações
específicas. Entre os diversos serviços, websites e redes sociais, podemos destacar o Twitter
como uma ótima ferramenta para as mais diversas pesquisas. Trata-se de um micro-blog onde
as mensagens (tweets) são escritas de forma a passar o máximo de informação com o mínimo
de caracteres – no máximo 140 caracteres de cada vez. São publicados cerca de 500.000.000
tweets por dia, ou seja, uma grande fonte de dados para buscas e avaliação qualitativas.
Neste trabalho realizamos um estudo para capturar as mensagens publicadas no Twitter
sobre um determinado assunto ou hashtag e transferi-las para um posterior processamento em
sistema de banco de dados. A ideia é facilitar as pesquisas que se baseiam em informações do
site, dada a amplitude de participação tanto popular como de mídias tradicionais. Já se admite
utilizar o Twitter como ferramenta de pesquisa de opinião confiável e mais rápida.
Em particular, este projeto é uma cooperação com um trabalho de pesquisa do
Departamento de Comunicação da PUC-Rio que, por meio de uma análise sentimental de
tweets que se referem a determinado assunto, pretende avaliar e qualificar os tweets quanto a
serem pró ou contra tal assunto. Especificamente, foram coletados tweets do 2º turno das
eleições 2014 que permitiram identificar claramente perfis pró-Dilma ou pró-Aécio a partir
das mídias sociais.
Objetivos
Desenvolver um sistema de banco de dados que, através de um site colaborativo,
permita ao usuário escolher um assunto para filtrar tweets em um período de tempo e, em
seguida, acessar dados, relatórios e gráficos a partir de uma interface web. Também deseja-se
obter planilhas com todos os tweets referentes às características fornecidas para posterior
manipulação offline. Disponibilizar um programa baseado na web que colete as mensagens
desejadas do twitter, atuais ou de períodos já passados, as transfira para um banco de dados
devidamente estruturado e facilitar o acesso de usuários especialistas ou leigos na
interpretação das informações exibidas.
Metodologia

Utilizando a API do Twitter
Com o objetivo de incentivar o desenvolvimento de aplicativos que utilizem o Twitter,
incentivando ainda mais seu uso e abrangência, existe uma interface de programação de
aplicações (API - Application Programming Interface) própria para desenvolvedores
interessados nesta rede social. Uma API é composta por uma série de funções acessíveis
somente por códigos de programas ou aplicativos que não precisam envolver-se em detalhes
da implementação do software, mas apenas usar seus serviços.
API do Twitter é composta por um conjunto de Web Services, uma solução de software
utilizada na integração de sistemas e na comunicação entre aplicações diferentes, baseados na
arquitetura REST [1]. Através da API do Twitter realizamos consultas para obter tweets com a
Departamento de Informática
hashtag #eleicoes2014 de até 1 semana antes da data corrente e obtemos a resposta em um
formato específico (JSON), útil para troca de dados [2]. Através desta API foi possível coletar
e armazenar em um banco de dados gerenciado pelo PostgreSQL diversos tweets, em uma
taxa de aproximadamente 2 tweets por segundo.
No caso, os dados capturados de cada tweet para esta pesquisa específica foram: nome
do usuário que publicou o tweet e o texto publicado, a data no formato timestamp (dia e hora)
e o número de retweets daquele tweet (dado este que não pôde ser validado). Outros dados
importantes como número de pessoas que consideraram aquele tweet como favorito, a
quantidade de seguidores da pessoa que publicou o tweet ou mesmo se a conta é verificada
(por exemplo, se é de alguma pessoa conhecida ou famosa), também poderiam ter sido
obtidos de maneira similar.
Diversos serviços são fornecidos pela API, entre eles escrever e ler um tweet (o que
usamos para a captura dos tweets com #eleicoes2014). Muitos desses serviços necessitam de
autenticação e autorização por parte do usuário. Em ambas as etapas, é utilizado o protocolo
OAuth. Trata-se de um padrão aberto que permite aos usuários de um site garantirem acesso,
por uma aplicação externa, aos seus recursos privados sem a necessidade de compartilhar suas
senhas e logins. Para isso, o protocolo OAuth estipula um fluxo de comunicação entre a
aplicação solicitante (no caso a desenvolvida para coleta de tweets) e a aplicação servidora
(no caso o Twitter). O fluxo de comunicação ocorre em três etapas básicas: obtenção do token
de requisição; autenticação e autorização pelo usuário e obtenção do token de acesso. Os
tokens são únicos para cada sessão e expiram se não forem usados após um determinado
tempo.
Em nosso caso particular, o programa que utiliza a API foi escrito na linguagem Python,
devido à facilidade de comunicação com a mesma, e possui apenas 56 linhas de código. Na
programação foi implementada a biblioteca TWEEPY para a conexão com a referida API [3].
Podem ser realizadas pesquisas avançadas através das consultas, definindo exatamente o que
se deseja obter como resultado (por exemplo, tweets contendo uma certa palavra ou uma dada
hashtag, data, etc.). Para isso, a consulta é realizada com o método API.search que possui
vários parâmetros de acordo com o que desejamos extrair de cada tweet [4].
Foi utilizado como ambiente de execução dos nossos programas uma máquina com
processador Intel Core i7 com 8GB de memória RAM, 500GB de disco e sistema operacional
Windows 8. O programa se conecta com um banco de dados PostgreSQL e todo os resultados
obtidos nas consultas são nele armazenados. Assim criamos nossa coleção de dados ou tweets
interessantes. O SGBD (Sistema Gerenciador de Bancos de Dados) PostgreSQL implementa
um modelo de dados relacional estendido. Na cooperação com o Departamento de
Comunicação, temos no banco de dados para esta pesquisa específica algo como 200 mil
tuplas distintas referenciando os dados filtrados pelo tag das eleições no período escolhido.
Os resultados obtidos pelas ferramentas computacionais desenvolvidas neste projeto
foram publicados no trabalho "Opinião pública e comunicação política em #Eleições2014:
Uma análise preliminar” onde participamos como autores junto ao autor principal, o Professor
Arthur Ituassu do Departamento de Comunicação Social da PUC-Rio [5], apresentado ao
Grupo de Trabalho (GT) Comunicação e Política no XXIV Encontro Anual da Associação
Nacional dos Programas de Pós-Graduação em Comunicação (Compós), na Universidade de
Brasília (UnB), de 9 a 12 de junho de 2015. Além deste evento importante na área, uma
versão estendida do artigo está aceita e será publicada na Revista E-Compós (Qualis B1).
Também foram estudados modelos de bancos de dados alternativos ao banco de dados
relacional, que implementam o modelo NoSQL (Not Only SQL). A ideia foi analisar o
armazenamento dos tweets de forma a otimizar o sistema. O objetivo seria implementar e
persistir os dados também em um banco NoSQL e comparar os resultados obtidos com os já
obtidos com o modelo relacional. Esta parte do trabalho não foi implementada.
Departamento de Informática

Utilizando um programa do tipo WebCrawler
Cabe observar que, para a coleta de dados mais antigos, a API do Twitter não permite o
acesso. Assim, optou-se por um método complementar para a coleta destes outros tweets.
Particularmente, foi desenvolvido também em Python um código que funciona como um
crawler para navegação de páginas web. WebCrawler pode ser denifido em português como
rastreador web. É um programa de computador que navega pela World Wide Web de uma
forma metódica e automatizada, ou seja, basicamente captura toda a informação contida em
uma url especificada para poder filtrarmos os dados desejados em nosso programa
posteriormente. No nosso caso, passamos como parâmetro para o crawler uma página do
Twitter resultado da pesquisa que queremos, gerada através da busca avançada (Advanced
Search) do próprio site [6].
Utilizando a biblioteca de programas BeautifulSoup específica para Python [7],
transferem-se todos seus dados para o programa, onde é feita uma filtragem das informações
desejadas para posterior transferência para o banco de dados optado por nós, o PostgreSQL.
Assim, torna-se viável a coleta de tweets antigos (há mais de uma semana da data corrente) já
que, embora não liberados via API, estas informações são visíveis se pesquisarmos no site do
Twitter através de uma busca avançada, mencionada anteriormente, definindo o intervalo de
tempo entre outras informações.
Para o maior aproveitamento das informações devemos nos adaptar ao formato de
disponibilização das informações da url desejada. No caso do Twitter, quando acessamos o
resultado da busca avançada devemos descer a página até o final para carregarmos mais
tweets, até chegar ao fim da pesquisa. Assim, foi necessário usar a biblioteca Selenium [8] que
possui uma ferramenta Scroller que justamente realiza essa tarefa de descer uma url até o
final e assim garantirmos total aproveitamento dos tweets fornecidos.
O programa WebCrawler é mais complexo que o programa de coletas via API,
contando com 4 módulos que interagem entre si [8]. A princípio o programa foi rodado em
uma máquina com processador Intel Core i7 com 8GB de memória RAM, 500GB de disco e
sistema operacional Windows 8 e foi usado como webdriver para o crawler o Firefox. Porém,
para planos futuros de criar um site colaborativo que executasse o programa foi preciso
realizar algumas adaptações para o programa rodar no servidor como, por exemplo, trocar o
webdriver Firefox por um webdriver Headless, ou seja, que execute sem uma interface gráfica
com o usuário. Assim, escolhemos utilizar o PhantomJS [9], um headless webdriver para
Windows. Felizmente, a troca do webdriver resultou em uma melhoria exponencial do
desempenho do programa em relação tempo total de execução.

Implementação do site colaborativo
Para total autonomia do cliente, foi pensado em desenvolver um site colaborativo tal
que pudesse ser definido uma busca de intervalo recomendável de até uma semana e fosse lhe
devolvido por e-mail uma planilha com as seguintes informações de cada tweet recolhido:
nome, usuário, texto do tweet, data e hora.
O site se baseia na busca avançada do Twitter para começar a pesquisa e, a partir da url
gerada, executa o WebCrawler obtendo os dados desejados.
Para acessá-lo basta entrar no link http://104.237.129.216/twitter_crawler_web/,
acessar a aba “Contate-nos” e pedir um cadastro que permite iniciar o agendamento das
buscas.
Departamento de Informática
É importante observar que a data definida na busca avançada deve ser a mesma
definida no site colaborativo para perfeito funcionamento do programa.
Conclusões
O estudo teórico para implementação do projeto permitiu que fosse desenvolvido um
programa que executasse o objetivo com sucesso e, consequentemente, um site colaborativo
para interação com usuário e automatização do processo.
Foram estudadas diversas formas de coletar os dados da web, novas linguagens de
programação e distintos bancos de dados, tanto os relacionais, como os não relacionais.
Referências
1 - http://pt.wikipedia.org/wiki/REST
2 - http://json.org/
3 - http://www.tweepy.org/
4 - https://dev.twitter.com/rest/reference/get/search/tweets
5 - http://compos.org.br/biblioteca/final_comautoria_2782.pdf
6 - https://twitter.com/search-advanced
7 - https://pypi.python.org/pypi/BeautifulSoup
8 - https://github.com/biavaz/webcrawler_twitter
9 - http://phantomjs.org/
Download