Web Scraping 101

Publicado em · 4 min de leitura

Aqui você vai aprender o conceito de web scraping e algumas técnicas empregadas nesse processo, uma introdução ao uso do arquivo robots.txt, que define diretrizes para bots de web scraping, e um exemplo prático com Python e a biblioteca httpx.

Web Scraping ou em português raspagem da web, é uma forma de mineração de dados (será abordado em outro artigo) focada em extrair dados de páginas web. Esse processo envolve converter os dados coletados para uma forma estruturada, permitindo seu uso em análises, relatórios, integração com banco de dados e outros. É empregado em diversos contextos, como monitorar preços de itens específicos, buscar documentos, avaliar reações em redes sociais e outros.

Algumas técnicas de scraping:

Cópia Manual

Requisições HTTP

Reconhecimento Semântico

Aplicação de Visão Computacional

Por meio de APIs

O que é robots.txt

O arquivo robots.txt é um arquivo de texto usado por websites para comunicar os motores de busca e outros crawlers quais partes do site podem ou não ser rastreadas ou indexadas. Ele está localizado na raiz de um domínio de um website (por exemplo, https://medium.com/robots.txt)..)

Como ler um arquivo robots.txt

User-agent: *
Disallow: /private/
Disallow: /temp/

User-agent: c3p0
Disallow: /no-c3p0/

No exemplo acima, nenhum robô deve rastrear os diretórios private e temp, enquanto o indexador c3p00, não deve acessar o diretório no-c3p0.

Hands On com Python

Vamos fazer o scraping de um clássico desse meio, o site Books to Scrape, acesse aqui: https://books.toscrape.com/

Vamos começar instalando as bibliotecas necessárias:

pip install httpx beautifulsoup4

Importando as bibliotecas:

import httpx
from bs4 import BeautifulSoup
import json

Fazendo a requisição, criando um objeto BeautifulSoup e buscando todos os elementos HTML que representam os livros:

# URL da página
url = "https://books.toscrape.com/"
# Fazendo a requisição HTTP
response = httpx.get(url)
# Criando um objeto BeautifulSoup para analisar o conteúdo HTML da página
soup = BeautifulSoup(response.text, "html.parser")
# Encontrando todos os elementos HTML que representam os livros na página
books = soup.find_all("article", class_="product_pod")

Armazenar as informações de todos os livros da página, fazendo a iteração por cada elemento encontrado:

# Lista para armazenar as informações dos livros
books_info = []
# Iterando sobre cada elemento de livro encontrado
for book in books:
    # Extraindo o título do livro
    title = book.h3.a["title"]
    # Extraindo o preço do livro
    price = book.find("p", class_="price_color").get_text().strip()
    # Extraindo a avaliação do livro (classe CSS indica a avaliação)
    rating = book.p["class"][1]
    # Extraindo a disponibilidade do livro
    stock = book.find("p", class_="instock availability").get_text().strip()

    # Criando um dicionário com as informações do livro
    book_info = {
        "title": title,
        "price": price,
        "rating": rating,
        "availability": stock
    }
    # Adicionando o dicionário à lista de informações dos livros
    books_info.append(book_info)

    # Imprimindo as informações de cada livro (opcional)
    print(f"Title: {title}")
    print(f"Price: {price}")
    print(f"Rating: {rating}")
    print(f"Available: {stock}")
    print()

E agora armazenando as informações dos livros em um arquivo JSON:

with open("books_info.json", 'w', encoding='utf-8') as json_file:
    json.dump(books_info, json_file, ensure_ascii=False, indent=4)

Este código é um bom ponto de partida para quem deseja praticar técnicas de web scraping. Um próximo passo interessante seria adaptar o código para extrair informações de todas as páginas do site.

Se você tiver alguma dúvida ou sugestão, sinta-se à vontade para entrar em contato. Você pode encontrar o código completo deste exemplo em: https://github.com/francocontigo/artigos/blob/main/WebScraping101/scraping.py

Para outras informações de contato, GitHub.

#python#web-scraping