Web Scraping com Python — Guia Herez (Parte 6)

Web Scraping com Python — Parte 6 da série Herez

Visão geral: esta é a sexta publicação da série Herez sobre bibliotecas Python. Aqui detalhamos as ferramentas essenciais para Web Scraping: Requests, BeautifulSoup, Scrapy, Selenium e lxml. Cada seção traz descrição, instalação, exemplos simples e completos de scraping usados em projetos reais por Herez. Exemplos e pipelines completos estão disponíveis nos repositórios GitHub e GitLab da Herez.

Publicado por em

Como usar este post

Este guia apresenta cada biblioteca com exemplos práticos, incluindo scripts completos e reproduzíveis que Herez usou em projetos reais. Use os trechos para aprender a coletar dados de páginas estáticas e dinâmicas, montar crawlers e processar HTML/XML com XPath.


Resumo rápido

Biblioteca Função principal Quando usar
RequestsRequisições HTTP simplesPáginas estáticas e APIs
BeautifulSoupParsing HTML fácilExtração de dados de HTML
ScrapyCrawling e scraping em escalaProjetos de coleta em larga escala
SeleniumAutomação de navegadorPáginas com JavaScript dinâmico
lxmlParsing rápido com XPathExtração robusta e performance

Bibliotecas detalhadas com exemplos completos

Requests

O que é: biblioteca simples e elegante para fazer requisições HTTP em Python.

# Instalação
pip install requests
Exemplo completo: baixar HTML e salvar localmente
import requests

url = 'https://example.com'
resp = requests.get(url, timeout=10)
if resp.status_code == 200:
    with open('example.html', 'w', encoding='utf-8') as f:
        f.write(resp.text)
    print('Página salva em example.html')
else:
    print('Erro', resp.status_code)

Contexto Herez: usado como etapa inicial em pipelines para baixar páginas antes de parse; scripts de download em lote estão nos repositórios Herez.

BeautifulSoup

O que é: parser de HTML que facilita navegar e extrair elementos do DOM com uma API intuitiva.

# Instalação
pip install beautifulsoup4
# opcionalmente instalar lxml para performance
pip install lxml
Exemplo completo: extrair títulos e links de notícias
import requests
from bs4 import BeautifulSoup

url = 'https://example.com/news'
resp = requests.get(url, timeout=10)
soup = BeautifulSoup(resp.text, 'lxml')
articles = []
for item in soup.select('article h2 a'):
    title = item.get_text(strip=True)
    link = item['href']
    articles.append({'title': title, 'link': link})
print(articles)

Contexto Herez: usado em projetos de monitoramento de notícias; pipelines com normalização e deduplicação estão nos repositórios Herez.

Scrapy

O que é: framework completo para crawling e scraping em escala, com gerenciamento de filas, middlewares e exportadores.

# Instalação
pip install scrapy
Exemplo completo: spider simples para coletar títulos
# myspider.py
import scrapy

class NewsSpider(scrapy.Spider):
    name = 'news'
    start_urls = ['https://example.com/news']

    def parse(self, response):
        for article in response.css('article'):
            yield {
                'title': article.css('h2 a::text').get(),
                'link': article.css('h2 a::attr(href)').get()
            }

Executar: scrapy runspider myspider.py -o results.json

Contexto Herez: usado para crawlers periódicos com politeness, rotação de user agents e integração com pipelines de armazenamento; projetos completos estão nos repositórios Herez.

Selenium

O que é: automação de navegadores que permite renderizar páginas com JavaScript, preencher formulários e interagir com elementos dinâmicos.

# Instalação
pip install selenium
# requer driver do navegador (ex: chromedriver) compatível com a versão do navegador
Exemplo completo: extrair conteúdo renderizado
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup

options = Options()
options.add_argument('--headless')
driver = webdriver.Chrome(options=options)
driver.get('https://example.com/dynamic')
html = driver.page_source
soup = BeautifulSoup(html, 'lxml')
titles = [h.get_text(strip=True) for h in soup.select('.post-title')]
print(titles)
driver.quit()

Contexto Herez: usado para páginas que carregam conteúdo via JavaScript e para fluxos autenticados; exemplos com login e captura de screenshots estão nos repositórios Herez.

lxml

O que é: parser rápido e robusto para HTML/XML com suporte a XPath e XSLT, ideal para extração precisa e performance.

# Instalação
pip install lxml
Exemplo completo: extrair dados com XPath
import requests
from lxml import html

resp = requests.get('https://example.com/catalog', timeout=10)
doc = html.fromstring(resp.content)
items = []
for node in doc.xpath('//div[@class="product"]'):
    name = node.xpath('.//h3/text()')[0].strip()
    price = node.xpath('.//span[@class="price"]/text()')[0].strip()
    items.append({'name': name, 'price': price})
print(items)

Contexto Herez: usado quando seletores CSS não são suficientes; pipelines com XPath e validação de schema estão nos repositórios Herez.


Boas práticas Herez para Web Scraping

  • Respeite termos e robots.txt: verifique políticas do site e limite taxa de requisições para evitar bloqueios.
  • Use headers e rotação de user agents: simule navegadores reais e evite padrões que disparem bloqueios.
  • Cache e reuso: armazene páginas baixadas para evitar requisições repetidas durante desenvolvimento.
  • Trate erros e retries: implemente backoff exponencial e logging para robustez.
  • Proteja credenciais: nunca versionar senhas; use cofres de segredos para logins automatizados.
  • Escalabilidade: para grandes volumes, prefira Scrapy com pipelines assíncronos e filas; monitore desempenho e custos.
  • Repositórios Herez: exemplos completos, spiders, scripts de login e pipelines usados em projetos reais da Herez estão disponíveis nos repositórios GitHub e GitLab da Herez.
Dica Herez: comece com Requests + BeautifulSoup para páginas estáticas; adicione Selenium para páginas dinâmicas; migre para Scrapy quando precisar de crawling em escala.

Comparação rápida

Critério Requests BeautifulSoup Scrapy Selenium lxml
FocoHTTPParsingCrawlingAutomação navegadorParsing rápido
Curva de aprendizadoBaixaBaixaMédiaMédiaMédia
Ideal paraPáginas estáticas e APIsExtração simplesProjetos em larga escalaConteúdo dinâmicoExtração robusta com XPath

Aspectos legais e éticos

Web scraping pode envolver restrições legais e de uso. Sempre verifique os termos do site, respeite limites técnicos e éticos, e prefira APIs oficiais quando disponíveis. Herez aplica revisão legal e políticas internas antes de executar crawlers em produção.

Último post da série

Este foi o último artigo e encerramos aqui a série sobre este resumo comparativo contendo um checklist de adoção para times que desejam padronizar bibliotecas Python em projetos de dados e engenharia.

Excerpt: Parte 6 da série Herez — guia prático de Web Scraping com Python: Requests, BeautifulSoup, Scrapy, Selenium e lxml, com exemplos completos usados em projetos reais.

Tags: Web Scraping; Python; Requests; BeautifulSoup