Tutorial Beautiful Soup: Raspando Dados da Internet

Bem vindo ao tutorial Beautiful Soup! Neste artigo nós falaremos sobre como fazer raspagem de dados (ou web scraping) de um determinado site.

Nós já abordamos o assunto no artigo anterior Introdução a Web Scraping com Python, e neste artigo nós iremos nos aprofundar um pouco mais.

Para acompanhar melhor este artigo, você pode baixar o código fonte no repositório beautifulsoup-example no github.

Tutorial Beautiful Soup

Tutorial Beautiful Soup - beautifulsoup logo

Como já foi dito anteriormente, o Beautiful Soup é uma ferramenta para extração de dados estruturados nos formatos HTML  e XML.




Objetos expostos pelo Beatiful Soup

Apesar de documentos HTML  possuírem uma árvore complexa de elementos e informações, o Beatiful Soup traduz isso pra gente de uma maneira bem simples e intuitiva.

Nós nos depararemos normalmente com os objetos Tag , NavigableString , BeautifulSoup , e Comment .

Beatiful Soup Tag

O objeto Tag  representa nada mais, na menos do que uma tag de um documento HTML  ou XML .


Note que ao acessarmos uma tag diretamente, o Beautiful Soup devolverá a primeira ocorrência daquela tag no documento.




Para obter uma lista de tags de um determinado tipo, é possível utilizar o método find_all('nome_da_tag') .

Beautiful Soup NavigationString

Quando utilizamos string para acessar os dados de uma tag, o Beautiful Soup utiliza por baixo dos panos o objeto NavigationString.


Caso você queira ou precise trabalhar diretamente com strings, você pode fazer o ‘casting‘ utilizando str .




Beautiful Soup e o objeto BeautifulSoup

O objeto BeautifulSoup representa o documento em si como um todo.

O objeto BeautifulSoup possui muitas características do objeto Tag, porém por não ser exatamente uma tag HTML ou XML, ele não possui atributos, e também não possui um nome diretamente.

Tutorial Beautiful Soup – Obtendo os dados do Site

i will find your data

Bem, como este artigo é uma continuação do artigo Introdução a Web Scraping com Python, nós continuaremos obtendo as informações deste mesmo blog, já que eu sou o dono dele, e não teremos problemas por fazer muitas requisições sem autorização no site dos outros.

Nós estamos partindo do seguinte código fonte:


E o que podemos fazer agora?

Bem, se vocês perceberam, neste projeto nós só obtemos informações da primeira página do nosso site.

Para navegar pelas próximas páginas, existem diversas estratégias.

Neste caso, o meu blog possui o padrão de paginação /page/número.

Isso quer dizer que podemos realizar uma nova requisição para a próxima página assim que precisarmos.

E como saber se ainda existem páginas?

Bem, caso tentemos acessar uma página que não existe, por padrão, o meu blog retornará o código 404, que representa que o que estamos procurando não foi encontrado.

E como o requests  possui um método que cai como uma luva nesta situação, nós só precisamos chamar raise_for_status()  que ele levantará uma exception  caso o código http retornado represente um erro.

Isolando o código para obter a próxima página

Até agora, nós precisávamos chamar o nosso site apenas uma vez. Como agora nós vamos chamá-lo diversas vezes, é uma boa ideia isolar esta funcionalidade.

requests logo


No código acima nós recebemos a url que realizaremos a requisição.

Caso ocorra algum erro, como por exemplo a página não foi encontrada, nós retornaremos None .

Criando uma classe para o Blog

scrape data meme

Para facilitar um pouco o nosso trabalho, vamos criar uma classe para representar o nosso blog, e os artigos que ele possui.

Controlando a paginação

Como a nossa função para retornar o conteúdo da página retornará None  quando não tiver mais nada para buscar, nós podemos seguir a seguinte lógica:


Finalizando o nosso Tutorial Beautiful Soup

Bem, agora que já estruturamos a nossa estratégia para navegar em todas as páginas do site, vamos completar a nossa missão:


E ao executarmos o nosso projeto, o resultado será:

Conclusão

Trabalhar com o Beautiful Soup junto o requests pode ser muito poderoso.

Quando trabalhamos com web scraping, é tudo uma questão de analisar as informações que queremos, e traçar uma estratégia para conseguir obtê-la.

Quer continuar brincando com o código acima? É só clonar o projeto lá no github.

Caso você tenha perdido a introdução a web scraping com Python, não deixe de conferir clicando aqui.

Caso tenha gostado do artigo, ou tenha ficado alguma dúvida, não deixe de comentar abaixo!

 




Leave a Reply