Escolar Documentos
Profissional Documentos
Cultura Documentos
Aula2 Raspagem de Dados
Aula2 Raspagem de Dados
Chico Camargo
Raspagem de dados
● Ética e legalidade
● Exemplo 1: Reddit
● Exemplo 2: Wikipedia
● Exemplo 3: Twitter
Ética e Legalidade
● Do lado do servidor
○ Número de acessos e limites da API
○ Compartilhamento de dados
● Do lado do indivíduo/usuário
○ Qual a expectativa de privacidade?
○ Como o usuário será afetado?
Ética e Legalidade
Perguntas boas pra se considerar:
○ Já existe algum estudo parecido publicado?
○ Será possível identificar indivíduos a partir dos meus dados?
○ O funcionamento ou modelo de negócio do site será afetado
pelos meus resultados?
○ Eu estou seguindo os termos e condições de uso?
APIs
● Significa Application Programming Interface
● É, como o nome sugere, uma interface com o conteúdo
● A API controla quem tem acesso a quais dados, e como
APIs: exemplo
● https://www.reddit.com/r/The_Donald/search.json?q=brick
APIs: exemplo
Indica o começo de uma query (busca)
https://www.reddit.com/r/The_Donald/search.json?q=brick
https://developer.twitter.com/en/docs/api-reference-index
Parte 3: Twitter APIs
2. Streaming API
Você abre uma conexão com uma busca específica,
e o Twitter te manda tweets até a conexão se fechar
(ou um erro ocorrer).
● Ótima para acompanhar uma conversa evoluindo
ao longo do tempo
https://developer.twitter.com/en/docs/api-reference-index
Parte 3: Twitter APIs
Todas as APIs do Twitter requerem autenticação OAuth:
https://developer.twitter.com/en/docs/api-reference-index
Ética e termos de uso
● Essencialmente, para usar o Twitter, você promete não
republicar o dataset original
https://developer.twitter.com/en/docs/api-reference-index
REST API
● Máximo de X buscas a cada Y minutos
● https://developer.twitter.com/en/pricing/search-30day
● GET search/tweets
parecido com a busca avançada: https://twitter.com/search-advanced
● GET statuses/user_timeline
tweets recentes de um usuário
REST API
● Máximo de X buscas a cada Y minutos
● https://developer.twitter.com/en/pricing/search-30day
● GET search/tweets
parecido com a busca avançada: https://twitter.com/search-advanced
● GET statuses/user_timeline
https://developer.twitter.com/en/docs/api-reference-index
https://developer.twitter.com/en/docs/tweets/search/api-reference/get-search-tweets
tweets recentes de um usuário
https://developer.twitter.com/en/docs/tweets/timelines/api-reference/get-statuses-user_timeline
Streaming API
● GET statuses/filter
○ Até 400 palavras-chave, 5,000 usuários, ou 25 lugares
○ ~1% do volume total de tweets
○ É uma boa amostra, mas não é uma amostra aleatória [1]
● GET statuses/sample
○ “Uma amostra aleatória de todos os status públicos”
○ Também em torno de 1%
[1] Morstatter, F. (2013). Is the Sample Good Enough? Comparing Data from Twitter's Streaming API
with Twitter's Firehose. ICWSM 2013.
Argumentos da busca: status/filter
follow (users):
−Tweets criados pelo usuário
−Tweets em que o usuário deu retweet
−Respostas e retweets de tweets do usuário
● Exemplos:
− track=orange,apple,blackberry
se traduz para: orange OR apple OR blackberry
− track=orange apple, blackberry
Se traduz para: (orange AND apple) OR blackberry
Argumentos da busca: status/filter
locations
− Apenas para tweets geolocalizados
− Até 25 retângulos, nesta ordem:
longitude1,latitude1,longitude2,latitude2
●
longitude2,latitude2
longitude1,latitude1
O que vem em um tweet?
● Documentação:
−https://dev.twitter.com/overview/api/tweets
tweet = json.loads(line)
if (tweet != None) and ("place" in tweet) and
("country" in tweet["place"]):
print(tweet["place"]["country"])
Resolvido.
Data e hora (datetime) de um tweet
Python tem uma biblioteca exatamente pra isso
if "created_at" in tweet:
created_at = tweet["created_at"].replace(" +0000 "," ")
created_at = datetime.strptime(created_at,"%a %b %d %H:%M:%S
%Y")
https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior
Próximo passo:
● Twitter
https://colab.research.google.com/drive/1sNOP4
BDKyh23erxnIoazs-SKBqC7xCUc?usp=sharing
E se não tiver API?
● Às vezes o jeito é ir logo no código fonte e pegar
os dados “na marra”, sem ser de mão beijada pela API
● Em python:
○ A biblioteca requests faz a coleta dos dados
○ A biblioteca BeautifulSoup processa o HTML
E se não tiver API?
O que te interessa
pode estar por aqui
E se não tiver API?
● Em última instância, às vezes o jeito é fazer o
python controlar o seu navegador (ex: Firefox)
● Em python:
○ A biblioteca selenium faz exatamente isso
○ https://selenium-python.readthedocs.io/
○ https://pypi.org/project/selenium/