Ei Cientista de dados, conheça Web Scrapping e seus desafios.

Djalma Junior
comunidadeds
Published in
5 min readJun 9, 2022

Desde que comecei estudar ciência de dados, a maneira em que eu obtinha os dados era através de planilhas e queries no banco de dados. Após conhecer um pouco sobre a técnica me aventurei em aprender como usar essa ferramenta.

Foto de Adaline Kulas em https://morioh.com/p/2a515a6bfc6f

Neste post você ira aprender sobre:

  • O que é Web Scrapping ?
  • O que é Tag e Result Set no BeautifoulSoup?
  • O que é find e find all ?
  • Aplicação destes recursos em um site de livros, para responder 3 perguntas de negocio.

Web scrapping ou raspagem de dados baseia-se em fazer coletas em sites. Empresas utilizam desta ferramentas para tomar decisões de forma assertiva, pois utilizam dos dados para trazer embasamento para seu negocio.

BeautifulSoup(bs4) é uma das bibliotecas mais comuns em Python, que é usada para navegar, pesquisar e extrair dados de HTML, dentro do HTML existe tags(exemplo) e ao buscar ela obtemos o resultado como tag.bs4 quando unitária e ResultSet.bs4 como uma lista. A maneira mais corriqueira de conseguir a extração eh através dos métodos find_all() e find().Porem há uma diferença entre eles a qual vamos abordar a seguir.

O método find_all(titulo) traz todas as tags com o nome especificado entre parênteses em forma de lista.

O método find(titulo) traz a primeira tag como o nome especificado entre parênteses como um elemento.

As aplicações podem ser para diversos propósitos, sejam eles monitorar preços, manchete de noticias, cotação de ações, pesquisa de mercado, dentre outras.

Minhas coletas no site books to scrape, foram destinadas as categorias: Humor, Clássicos, Ficção cientifica e Business, ao qual a extração consiste em obter: preço, avaliação, titulo e disponibilidade em estoque dos livros.

Para conseguir fazer requisições devemos nos atentar em montar os mínimos parâmetros de conexão necessários.

parâmetros de conexão

A URL recebe o endereço de cada categoria desejada, neste exemplo utilizamos a categoria classics .

O Headers consiste em permitir que a requisição seja feita através de um browser da sua escolha, eu utilizei o chrome. Como os sites possuem um sistema de bloqueio de solicitações utilizamos desta ferramenta para não haver impedimentos, pois se fosse diretamente um código python não seria possível.

A variável page entrega como saída um objeto do tipo response, onde pode ter diversos valores, porem o valor que esperamos é o numero 200, este indica que deu tudo certo. Utilizando o método .text foi possível passar para a classe BeautifoulSoap e a partir daqui começar extrair dados.

Vitrine de livros books to scrape (ol, class = row)

Como nunca tinha de fato trabalhado com HTML, a forma mais fácil de assimilar como funciona, foi entender que as informações estão dentro de camadas e basta localizar a que deseja informações e extrair o que necessitar.

Extração do titulo, preço, estoque e avaliação dos livros.

o titulo foi bem tranquilo de extrair, encontrei a camada ‘h3’ utilizei o método find_all para obter uma lista com todas as camadas com este nome, em sequencia apliquei um laço for com o método find para trazer o primeiro elemento e conseguir pegar seu nome, observe a imagem abaixo.

extração do titulo do livro

Agora tente olhar para o preço e veja se consegue enxergar as camadas ate chegar no valor do livro.

extração do preço do livro

A categoria onde tive mais dificuldade de extrair os dados foi a categoria de avaliação, pois a sua classe chamada de ‘‘star-rating Four’’, não tem id, camadas ou algo que possa identificar de forma fácil. Como na foto abaixo a classe ‘‘icon-star’’ se repete mas não traz nenhuma informação.

Então a forma em que eu consegui solucionar este problema foi analisar a classe star-rating, esta classe consiste em uma string separada em dois elementos, star-rating como seu primeiro elemento e o numero de estrelas que o livro recebe como segundo elemento,

lista de avaliação dos livros

Esta lista tem na sua posição [0] star-rating e na segunda posição[1] as notas atribuídas, visto que essa seria a melhor forma para coletar estas informações, entrei na camada (p , class=’star-rating’ ) e captei todo segundo elemento da lista através do loop for e o método get. O resultado foi o seguinte:

extração completa da avaliação dos livros.

Bom, após esta manipulação eis que chegou o momento de fazer a analise exploratória para responder as perguntas de negocio.

Qual das categorias tem melhor avaliação ?

A categoria de humor possui a melhor avaliação, embora esteja sendo feito o calculo de media, esta categoria tem seus livros com todas as avaliações em cinco estrelas.

barplot das categorias x avaliação

Qual produto mais caro de cada categoria?

Código para consultar o preço do produto mais caro das categoria.

Qual produto mais barato de cada categoria?

Código para consultar o preço do produto mais caro das categoria.

Conclusão

Ufaa, enfim chegamos lá !! Com este primeiro contato foi possível enxergar o quão poderoso a técnica de web scrapping pode ser. A extração dos dados de fato não e a tarefa mais difícil mas sim a limpeza dos dados, aqui será onde o cientista de dados gastara a maior parte do seu esforço.

Agradeço a você que chegou ate aqui e te convido para ver este código no meu github, abaixo ficam meus contatos a disposição.

Djalma Jr.
LinkedIn: https://www.linkedin.com/in/djalmajunior07/

GitHub: https://github.com/djalmajr07

--

--