Uma breve introdução de web scraping com Beautiful Soup

Hugo R. V. Angulo
Turing Talks
Published in
8 min readAug 14, 2022

Texto escrito por: Hugo R. V. Angulo, Antonio Freire, Igor Augusto Martins Sousa, Bruno Vidigal

Introdução

Para além dos muitos datasets que conseguimos achar em sites como o Kaggle e que são comumente construídos nas empresas, existe uma quantidade imensa de informações úteis e interessantes que estão esparsas pelos websites alheios que acessamos de vez em quando. Essas informações não estão estruturadas nem prontas para uso… Logo, não podemos usá-las… certo? É aí que entra a importância da sabedoria de Web Scraping.

Web scraping significa a extração de informações e dados direto de um website. Isso pode ser feito manualmente, por exemplo com um copy & paste. Contudo, para possibilitar essa extração, essa extração, ferramentas para a automação são necessárias, como softwares específicos ou scripts utilizando diferentes bibliotecas focadas em web scraping. No nosso caso, vamos explorar mais a fundo como fazer Web Scraping com BeautifulSoup, uma biblioteca para extração de dados de páginas estáticas em HTML e XML.

BeautifulSoup é uma biblioteca que fornece ferramentas para extração de informações contidas no HTML de uma página estática. Uma página pode ser estática ou dinâmica, mas o que isso quer dizer?
- Estática: um request é processado pelo servidor do site e uma resposta é devolvida diretamente pelo servidor.
- Dinâmica: exige que o request passe por outros programas para devolver a resposta.

O foco do presente artigo será fazer uma aplicação de Webscraping em páginas estáticas, as páginas dinâmicas serão tratadas em futuros trabalhos.

Sobre o tal de “request”, mencionado acima, é por meio deles que a internet tem seu funcionamento, mais especificamente requests HTTP. Esses são os “pedidos” que seu navegador faz ao servidor da página pela qual está navegando. Com esses “pedidos” é que se renderiza a página web para que o usuário a veja e interaja com ela. Requests HTTP podem ser feitos pelo navegador e também em Python, usando a biblioteca Requests, que devemos usar conjuntamente ao BeautifulSoup para conseguirmos extrair as informações que buscamos.

Com a biblioteca Request, podemos interagir com as APIs dos sites em que desejamos fazer Web Scraping e, utilizando alguns de seus métodos, podemos extrair, adicionar, deletar e alterar informações, tudo isso fazendo um pedido ao servidor da página. No caso usando a biblioteca Requests como suporte ao BeautifulSoup, usamos o método GET para pegar ou extrair informações da página, interagindo com o seu servidor para que isso seja possível. Só assim conseguimos retirar os preciosos dados contidos na estrutura HTML de páginas estáticas.

No esqueleto do site, há partes do arquivo HTML que contém informações atreladas a algum produto ou item ali disposto, por exemplo, e com comandos específicos da biblioteca que exploraremos, podemos extrair esses dados e compilá-los em um dataset com essas informações. E a partir daí, fazer o que já sabemos, analisar esses dados. Então vamos para o código!

Aplicação

Para exemplificar a utilização do web scraping para a construção de datasets, iremos utilizar dados do site airBnB. Nosso objetivo é fazer uma comparação simplificada entre os preços e avaliações dos apartamentos em algumas capitais brasileiras.

O primeiro passo é fazer a importação das bibliotecas que utilizaremos neste projeto:

Após a definição das cidades do buscador diretamente no site, podemos obter as URLs de cada uma das cidades das quais queremos coletar informações (colocaremos aqui as urls resumidas para não ocupar muito espaço):

O próximo passo será clicar no botão “inspecionar” para visualizar no arquivo html do site e analisar sua estrutura.

Posteriormente iremos selecionar um elemento da página para conseguir acessar de forma mais direta às classes e tags do arquivo html. Aqui, mostramos como exemplo o elemento que armazena o preço da diária da locação.

Uma vez feito isso podemos visualizar o arquivo html de cada um dos itens de interesse.

Também é importante inspecionar a tag do item para passar à próxima página para posteriormente coletar os dados de cada uma das páginas.

Também utilizaremos a biblioteca BeautifulSoup e request para obter o arquivo html da url do site com a estrutura a seguir:

O comando find permite obter o html de uma tag, assim utilizaremos este comando:

O comando find_all permite obter uma lista do html de cada uma das tags onde esta tag se repete em conjunto com a class:

Antes de construir as listas com as informações que iremos coletar, utilizaremos a função a seguir para obter uma lista com as URLs de cada uma das páginas das cidades.

O comando .get(‘href’) permite obter uma string contendo a url de uma determinada tag e class, assim utilizaremos este comando para obter a url do item para passar à próxima página.

Para deixar o código mais limpo, vamos tirar elementos do código que não são necessários e obter apenas segmentos do texto do html. Iremos utilizar os comandos .get(‘href’) para obter links presentes no html e .get_text() para obter strings.

Além disso, iremos utilizar um for loop do Python para aplicar os comandos .get(‘href’) e .get_text() em cada um dos elementos da lista gerada pelo comando soup.find_all(tag, class) e desta forma criaremos listas de cada um dos elementos de interesse.

Assim, a função a seguir permite obter uma lista com cada um dos títulos, links, preços e avaliações de cada uma das acomodações da cidade definida pelo URL do buscador e construir um dataset com as informações coletadas do site.

E voilá! Um dataset novinho pra você poder analisar o que achar interessante!

Se quiser entender um pouco melhor como funcionam as funções do BeautifulSoup, a documentação está disponível nas referências!

Vamos agora visualizar estes dados rapidamente:

Podemos ver com o gráfico acima que as cidades com mais locações baratas são Manaus e Belo Horizonte, e que as mais caras aparentam estar no Rio de janeiro, vamos analisar melhor esse comportamento olhando as médias desses valores.

Aqui vemos que a média de preço de Manaus é maior que a de Belo Horizonte, isso se dá provavelmente por conta de termos locações com preços mais caros em Manaus, como pode ser visto na cauda do gráfico que fizemos anteriormente.

Curiosamente, vendo a matriz de correlação acima podemos notar que não há correlação entre preços e avaliações, a maioria das locações tem avaliações altas independentemente de seu preço.

Conclusão

Agora que extraímos dados de uma página usando BeautifulSoup, demos o primeiro passo para trabalharmos com dados contidos em websites. Entretanto, com web scraping, conseguimos ir muito mais longe em termos de fontes para extrairmos dados, até mesmo podemos extrair dados do Facebook, Instagram e outros sites com estrutura complexa.

Mesmo sendo páginas dinâmicas e até mesmo se tiverem anti-bots, se Captchas aparecerem no meio do caminho para impedir extrações automatizadas e, enfim, muito mais. Porém, é claro que também nesses cenários se torna muito mais desafiador achar formas de extração dos dados, já que exige uma robustez muito maior do método de extração para contornar os obstáculos que aparecem.

Também é necessário ter em mente que algumas barreiras são intransponíveis do ponto de vista de permissão de acesso a certos dados! Nos websites, há como acessar quase todo tipo de informação com a devida sabedoria, mas isso não significa que seja legal, então busque se informar a respeito daquilo que se tem ou não direito de acessar e extrair. Existem questões éticas que são importantes quando trabalhamos com web scraping! Tenha em mente que apesar de públicos, os dados extraídos não são de nossa autoria (em geral), portanto, é sempre interessante citar de onde estão vindo as informações e o que se pretende fazer (ou foi feito) com elas! Ademais, se tomarmos dados com muita frequência de um mesmo site podemos causar problemas em seu servidor, por isso, sempre devemos agir com cautela! Alguns sites até desenvolveram APIs para evitar essas inconveniências, disponibilizando apenas algumas informações e controlando o acesso ao servidor de seus sites.

Web scraping pode ser feito de muitas formas: por meio de softwares e extensões de navegadores, por meio de scripts prontos que podem ser rodados diretamente ou por meio de scripts de produção própria, os scrapers podem vir com diferentes User Interfaces que podem trazer diferentes níveis de dificuldade e aplicações conforme o scraper e também podem ser rodados de forma local usando o próprio servidor ou de forma cloud-based, utilizando um servidor externo.

Para além do exemplo que demos na prática, há muitas aplicações para as quais podemos usar web scraping! Aqui vão alguns exemplos:

  • Inteligência de preços: extração de informações de preços de produtos e serviços para contribuir nas frentes de precificação de produtos próprios, fazer monitoramento de concorrentes da sua área, otimizar a receita da empresa;
  • Pesquisa de mercado: extração de informações de preços do mercado, análise de tendências e perfil do consumidor;
  • Pesquisas de público: extração de dados por meio de monitoramento de notícias e posts e integrações de opinião pública;
  • Marketing: geração de leads por meio de extração de dados de usuários que acessam páginas específicas.

Praticando aos poucos, partindo de métodos mais simples de web scraping e subindo os níveis de dificuldade, muitas informações valiosas podem estar nas suas mãos para fazer análises cada vez mais poderosas.

Esperamos que você tenha gostado e muito obrigado por chegar até aqui. Se quiserem conhecer um pouco mais sobre o que fazemos no Grupo Turing, não deixem de nos seguir nas redes sociais: Facebook, Instagram, LinkedIn e, claro, acompanhar nossos posts no Medium. Para acompanhar também um pouco de nosso projetos, acesse nosso GitHub.

--

--