Web scraping com Python
Usando Python para extrair informações e tabular.
Grande parte do tempo de um analista de dados / cientista de dados não é gerar modelos preditivos, e sim fazer o tratamento de bases de dados que podem virem de qualquer lugar e de vários formatos. Uma dessas fontes pode ser por exemplo uma página da web, onde a qual não fornece uma api ou uma outra forma para extrair seus dados.
Dentro desse cenário hoje quero demonstrar a extração de dados via ‘web scraping’, na qual consiste de fazer a extração de dados via web (lógico não!?).
Esse processo pode ser feito através de várias linguagens (java, r etc..), e a qual vamos usar é o Python, que em conjunto da biblioteca do pandas se tornam ferramentas poderosas para a extração e manipulação dos dados.
Mas por quê fazer web scrapping?
E se você precisasse monitorar alguma hashtag? ou conseguir informações de sites do seu concorrente de forma automática? São muitos os motivos e as finalidades para tal atividade, e é claro, todas podem gerar uma vantagem para o negócio/atividade.
Vamos começar!
Indíce:
- Bibliotecas necessárias
- Extração de dados
- Visualização de dados
- Exportar
- Conclusão
- Referências
Importando as bibliotecas necessárias.
Importante: BeautifulSoup é uma das principais bibliotecas para fazer web scraping.
URL: nós definimos a URL que vamos fazer a extração dos dados.
RESP: fazemos um request usando a url acima.
SOUP: recebemos o código html.
Ao fazer o html parser usando a biblioteca BeautifulSoup irá retornar um código HTML igual este abaixo (variável soup).
Extração dos dados
Partindo do princípio que você possui um conhecimento básico de HTML, vamos analisar na página do imdb o qual o contéudo vamos extrair.
Acessando o link que fizemos a extração do html e visualizando o código:
Aqui onde a ‘mágica’ funciona, selecionamos classes (em laranja) dentro de classes atráves do find e find_all. Os dados em verde são aqueles que desejamos extrair, mostrados na lista acima.
Os dois ‘FOR’s acima são para extrair nome e ano do filme, e o segundo para extrair a nota do filme. Desse maneira vamos economizar em fazer quebras de strings para pegar somente os dados que precisamos.
Agora que temos os dados extraídos, vamos salvá-los em em listas para podermos jogarmos em um dataframe do pandas.
Ainda precisamos tratar esses dados, vamos retirar os parentes do ano e os espaços em branco da coluna do nome do filme.
Removendo os espaços de inicio/final de strings e parênteses através de regex.
Já que temos os valores em listas, criamos um dataframe passando essas listas e os nomes das colunas que desejamos.
Visualização dos dados
Como a estrutura do site para exibir a lista categorias é a mesma, você pode testar com outros links e o resultado vai ser tão bom quanto (Verificar a estrutura / html do site). Exemplo abaixo com o endereço de séries de tv, precisando apenas mudar a coluna movie.
https://www.imdb.com/chart/toptv
Exportar
Caso deseje você pode salvar a sua base em arquivo xlsx ( ou outro formato) para abrir no excel por exemplo.
Resultado:
Conclusão
Essa foi uma pequena pincelada de como fazer web scraping e como pode ser muito útil no dia a dia de quem trabalha com dados vindo de ’n’ fontes. E como com apenas algumas linhas de código é possível fazer uma extração completa de alguns sites.
Caso tenha alguma dúvida deixe nos comentários que respondo em breve!
Obrigado pela leitura!