Neste artigo, iremos discutir:
Como funciona a raspagem da web?
Raspar uma página web significa solicitar dados específicos de uma página web de destino. Quando raspa uma página, o código que escreve envia o seu pedido para o servidor que hospeda a página de destino. O código descarrega depois a página, extraindo apenas os elementos da página definidos inicialmente na tarefa de rastejamento.
Por exemplo, digamos que estamos à procura de dados alvo em etiquetas de títulos H3. Escreveríamos código para um raspador que procurasse especificamente essa informação. O raspador funcionará em três fases:
Passo 1: Enviar um pedido para o servidor para descarregar o conteúdo do sítio.
Passo 2: Filtrar o HTML da página para procurar as etiquetas H3 desejadas.
Passo 3: Copiar o texto dentro das etiquetas de destino, produzindo os resultados no formato previamente especificado no código.
É possível realizar tarefas de raspagem da web em muitas linguagens de programação com diferentes bibliotecas, mas a utilização de Python com a biblioteca Beautiful Soup é um dos métodos mais populares e eficazes. Nas secções seguintes, cobriremos o básico para a raspagem em Python usando Beautiful Soup.
O que é Beautiful Soup?
Beautiful Soup fornece métodos simples de navegação, pesquisa e modificação de uma árvore de parse em ficheiros HTML, XML. Transforma um documento HTML complexo numa árvore de objetos Python. Também converte automaticamente o documento para Unicode, para que não tenha de pensar em codificações. Esta ferramenta não só ajuda a raspar, mas também a limpar os dados. Beautiful Soup suporta o analisador de HTML incluído na biblioteca padrão de Python, mas também suporta vários analisadores de Python de terceiros como lxml ou hml5lib.
Pode saber mais sobre o espetro completo das suas capacidades aqui: Documentação da Beautiful Soup.
Instalação de Requests e Beautiful Soup
Para instalar Beautiful Soup, precisa de pip ou de qualquer outro instalador de Python. Também pode utilizar o seu Jupyter Lab. Nesta publicação, utilizaremos pip, pois é o mais conveniente. Abra o seu terminal ou Jupyter Lab e escreva:
1: Requests
2: Hml5lib
Passos fáceis para raspar em Python usando Requests e Beautiful Soup
Passo 1: Tem de enviar um pedido HTTP para o servidor da página que pretende raspar. O servidor responde enviando o conteúdo HTML da página web. Uma vez que estamos a utilizar Python para os nossos pedidos, precisamos de uma biblioteca HTTP de terceiros, e iremos utilizar Requests.
Comece por importar a biblioteca de Requests (pedidos) e fazer um simples pedido GET para o URL – escolhemos https://www.brainyquote.com/topics/motivational-quotes porque tem uma estrutura HTML simples e nos permitirá demonstrar facilmente o potencial da Beautiful Soup.
Se obtivermos uma resposta [200], isto basicamente significa que o sítio respondeu com um código de resposta HTTP 200 OK e enviou-nos o conteúdo HTML da página.
Vamos fazer novamente o mesmo pedido, mas desta vez vamos armazenar o resultado numa variável chamada r, e vamos imprimir o seu conteúdo.O resultado deverá ser o código HTML completo para esta página. Como pode ver, a sua Beautiful Soup não estruturada vai ajudar-nos a limpá-la e a obter os dados de que necessitamos.
Passo 2: Agora que temos o conteúdo HTML, precisamos de analisar os dados. Para isso, vamos utilizar Beautiful Soup com um analisador html5lib.Precisamos de passar dois valores para BeautifulSoup():
We need to pass two values into BeautifulSoup():
#1: Cadeia HTML do sítio web; ‘r.content’
#2: Que analisador de HTML usar; ‘html5lib’
Passo 3: Neste momento, quer ir para o sítio que está a raspar. Abra os Devtools (F12), e vá para o separador Elementos. Vamos procurar a camada superior da tabela.
Vamos imprimir a tabela para ter uma melhor ideia do que temos até agora, e vamos usar .prettify()
A sua produção deve ser algo parecido com isto:
Agora procuramos os dados de que necessitamos. Para este exemplo, tudo o que queremos é o texto citado e o nome do autor. Como pode ver, todos estes dados estão em
Agora só deve ter o
em cada instância de loop disponível para si. Pode testá-lo executando a impressão(fila) no loop.
Procuramos a informação sob a chave “img alt”, por isso vamos criar uma variável de citação e atribuir-lhe estes dados.
Como pode ver, embrulhei-o numa declaração de tentativa (‘try’). Neste caso, se uma das filas não tiver os dados que procura, não receberá um erro, e o loop continuará a avançar. Também dividi os resultados em ‘-‘. Como viu anteriormente, o texto e o nome do autor são separados usando um ‘-‘ Vamos usar isso para separar os dois e dividi-los.
É tudo. Está pronto. Aqui está como deve ser agora a sua variável de citação:
No final deste processo, pode guardar os seus dados num ficheiro, e o seu código deve ser algo parecido com isto: