Bem-vindo a uma postagem introdutória sobre web scraping com Python. Web scraping é o processo de usar ferramentas de software automatizadas (muitas vezes chamadas de scrapers, bots ou crawlers) para extrair dados estruturados de sites. Ele transforma o código HTML, que renderiza a página da Web para visualização humana, em formatos de dados organizados (como planilhas ou bancos de dados).
Scraping de dados da Web é muito utilizado para monitorar preços, acompanhar postagens de mídias sociais, analisar sites de concorrentes, entre outras inúmeras aplicações. Especificamente para aplicações de machine learning, web scraping é uma ferramenta essencial para a obtenção de dados para o treinamento de modelos.
Como Web Scraping Funciona?
A realização de scraping envolve algumas etapas principais. Primeiro, é preciso identificar os sites que contêm o conteúdo desejado. Em seguida, é necessário acessar o código de HTML do site para identificar os elementos específicos (por exemplo, títulos de produtos, preços, revisões) de interesse. Por fim, os dados extraídos são organizados em formatos utilizáveis como CSV, JSON.
Web Scraping com Python e Beautiful Soup
Existem várias bibliotecas Python que podem ser usadas para realizar web scraping. Uma delas é a Beautiful Soup 4, que será o foco desta postagem. Beautiful Soup é uma biblioteca Python destinada a auxiliar programadores Python que precisam raspar dados de sites de forma rápida e sem complicações. Para usá-la, é preciso instalá-la:
pip install beautifulsoup4
Também é preciso instalar a biblioteca requests para buscar páginas da Web com Python.
python -m pip install requests
É importante instalar também um analisador (parser). O Beautiful Soup suporta o analisador HTML incluído na biblioteca padrão do Python, mas também suporta vários analisadores Python de terceiros. Um deles é o analisador lxml.
pip install lxml
Acessando URLs
Para realizar scraping com Beautiful Soup, em um código Python, importe o módulo requests para buscar páginas da Web e o módulo BeautifulSoup de bs4 para analisar o HTML.
import requests
from bs4 import BeautifulSoup
Use requests.get(url) para obter o conteúdo HTML da URL de destino e armazená-lo em uma variável. Para esse exemplo, usaremos a página http://quotes.toscrape.com/.
url = "http://quotes.toscrape.com/"
response = requests.get(url)
Em seguida, verifique se o acesso à página ocorreu com sucesso (response.status_code == 200). Em caso positivo, crie um objeto BeautifulSoup passando o conteúdo HTML recuperado e especificando o analisador HTML lxml.
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'lxml')
print(soup)
Imprimindo o objeto soup (parcialmente mostrado abaixo), verificamos que o conteúdo de HTML da página do nosso exemplo já está inteiramente disponível. Na etapa seguinte, será necessário especificar os elementos que queremos desse conteúdo e extraí-los.
Quotes to Scrape
...
Formas de Identificação e Extração de Dados
Beautiful Soup fornece alguns métodos para encontrar e extrair elementos HTML. Entre os principais estão:
- O comando soup.find(‘tag_name’) encontra a primeira ocorrência de uma tag específica (por exemplo, div, a, p, h1).
- Com soup.find_all(‘tag_name’) localizamos todas as ocorrências de uma tag.
- Já o comando element[‘attribute_name’] acessa o valor de um atributo dentro de um elemento (por exemplo, class_name, arial_label).
- Para navegar na hierarquia de elementos HTML, usam-se métodos como element.parent, element.children e element.next_sibling.
Na prática, a localização de elementos pode ocorrer diretamente através do código HTML retornado pelo Beautiful Soup ou acessando a URL diretamente na internet. Para identificar os elementos diretamente na página da Web, clique em cada um deles com o botão direito do mouse e selecione a opção para inspecioná-lo (imagem abaixo). Ela mostrará o trecho de HTML específico para o elemento de interesse. Com isso, podemos anotar as tags ou atributos que queremos.
Veja um exemplo de HTML mostrando os atributos de um elemento de interesse.
No próximo post, faremos a extração dos elementos de uma página de exemplo para demonstração.