Guia geral de web scraping 11 min de leitura

Bibliotecas para web scraping

Catálogo de bibliotecas de scraping para Python, JavaScript, PHP, Java, C# e Go: o que escolher para páginas estáticas, conteúdo dinâmico e APIs.

EW
Equipe Web-Scraping.biz
Coleta de dados para as demandas do negócio
Publicado: 31 janeiro 2025

Em outro artigo analisamos em que linguagem escrever um scraper e comparamos as linguagens entre si. Aqui descemos ao próximo nível de detalhe: um catálogo de bibliotecas concretas. Se a linguagem já está decidida, resta escolher as ferramentas — e este é o panorama delas, organizado por linguagem e por papel, com links para os sites oficiais.

Quatro funções das bibliotecas

Antes de listar pacotes concretos, vale entender que praticamente qualquer scraper se monta com ferramentas de quatro tipos. E, muitas vezes, uma biblioteca não é usada sozinha, mas em dupla: o cliente HTTP baixa o HTML e o parser o analisa, por exemplo.

  • Clientes HTTP. Enviam requisições e recebem a resposta (HTML, JSON). Rápidos e leves, mas não executam JavaScript: veem apenas o que o servidor devolve. Servem para páginas estáticas e para chamar diretamente a API do site.
  • Parsers de HTML/XML. Convertem a string de HTML em uma árvore na qual é possível buscar dados com seletores CSS ou XPath. Sozinhos não baixam nada: recebem como entrada um HTML já obtido.
  • Automação de navegador (headless). Iniciam um navegador real (normalmente o Chromium), executam JavaScript e sabem clicar, rolar a página, preencher formulários e esperar elementos aparecerem. Indispensáveis para SPAs e conteúdo dinâmico, ainda que pesados em recursos.
  • Frameworks completos. Assumem todo o pipeline: fila de requisições, concorrência, novas tentativas, processamento e armazenamento dos dados (pipelines). Pensados para tarefas massivas e recorrentes, em que o que importa não é uma página, mas milhares.

A seguir, as bibliotecas por linguagem, agrupadas internamente segundo esses papéis.


Python

Clientes HTTP: requests — o clássico, síncrono e simples; httpx — o substituto moderno, com suporte a async e HTTP/2; aiohttp — cliente assíncrono para cargas altas; curl_cffi — imita a impressão digital TLS de um Chrome real e ajuda a superar a proteção anti-bots básica sem navegador.

Parsers: BeautifulSoup — o mais amigável para quem está começando; lxml — rápido, escrito em C, com suporte a XPath; parsel — o motor de seletores do ecossistema do Scrapy; selectolax — o mais veloz com grandes volumes; pyquery — sintaxe no estilo jQuery.

Automação de navegador: Playwright — a escolha moderna padrão (async, esperas automáticas); Selenium — o veterano, com uma comunidade enorme; SeleniumBase — uma camada sobre o Selenium com modo de camuflagem; nodriver — ferramenta stealth do autor do undetected-chromedriver (este último ficou bastante defasado e lida pior com as proteções modernas).

Frameworks: Scrapy — o padrão maduro para crawling em grande escala com pipelines; Crawlee for Python — um híbrido que alterna entre HTTP e navegador; MechanicalSoup — trabalho leve com formulários e sessões; Scrapling — um scraper adaptativo recente, resistente a mudanças de layout.


JavaScript / Node.js

Clientes HTTP: o fetch nativo; axios — o cliente mais popular, com uma API confortável; got — leve e rápido; undici — cliente de alto desempenho da equipe do Node.js.

Parsers: cheerio — análise rápida de HTML estático no estilo jQuery; jsdom — emulação completa do DOM (mais pesada que o cheerio); parse5 e htmlparser2 — parsers de baixo nível sobre os quais outras ferramentas são construídas.

Automação de navegador: Puppeteer — controle do Chrome/Chromium; Playwright — o mesmo, com suporte a vários navegadores e uma API limpa; puppeteer-extra — plugins, incluindo stealth para camuflagem.

Frameworks: Crawlee — o poderoso framework da Apify, com filas, proxies e alternância automática HTTP/navegador; node-crawler — um crawler clássico com pool de requisições.


PHP

Clientes HTTP: Guzzle — o padrão de fato, compatível com as PSR; Symfony HttpClient — cliente moderno do ecossistema Symfony; o cURL nativo.

Parsers: Symfony DomCrawler — análise com seletores CSS e XPath; DiDOM — rápido e simples; Simple HTML DOM — a menor barreira de entrada, digere HTML «quebrado».

Navegação e navegador: Symfony BrowserKit (classe HttpBrowser) — emulação de navegador em PHP puro que segue links e envia formulários, mas não executa JS (foi para cá que migrou também o veterano Goutte); Symfony Panther e php-webdriver — controle de um Chrome/Firefox real para conteúdo dinâmico; chrome-php — controle direto do Chrome.

Frameworks: Roach PHP — um equivalente completo do Scrapy para PHP, com pipelines e middleware; crwlr — framework de «passos» prontos que se combinam em crawlers.


Go (Golang)

Clientes HTTP: net/http — a poderosa biblioteca padrão; resty — um wrapper prático com uma API enxuta.

Parsers: goquery — análise no estilo jQuery (seletores CSS); htmlquery — consultas por XPath.

Automação de navegador: chromedp — o padrão do setor, controle do Chrome via DevTools Protocol; Rod — uma alternativa moderna com uma API confortável; playwright-go — o port do Playwright.

Frameworks: Colly — framework rápido e concorrente para conteúdo estático; Geziyor — framework com suporte a renderização de JS; Ferret — extração de dados por meio de uma linguagem de consultas declarativa própria.


C / C++

Nesse nicho quase não há frameworks de alto nível: a dupla «cliente HTTP + parser» é montada à mão, em busca da máxima velocidade e do mínimo consumo de memória.

Clientes HTTP: libcurl — a biblioteca fundamental que sustenta os clientes da maioria das linguagens; CPR — um wrapper moderno de C++ sobre a libcurl, no estilo do requests do Python.

Parsers: libxml2 — parser maduro de HTML/XML; Gumbo — parser HTML5 do Google; lexbor — um motor HTML/CSS moderno e veloz; pugixml — parser XML leve para sitemaps e RSS.

Não há execução de JavaScript de fábrica: quando necessário, integra-se um motor de navegador embutido ou um headless externo.


C# / .NET

Clientes HTTP: HttpClient — o cliente que já vem com o .NET; RestSharp — um wrapper prático para requisições REST.

Parsers: HtmlAgilityPack — o mais popular, tolera HTML «quebrado» e suporta XPath; AngleSharp — em conformidade com os padrões do W3C, com querySelector como no navegador; Fizzler — motor de seletores CSS sobre o HtmlAgilityPack.

Automação de navegador: PuppeteerSharp — o port do Puppeteer; Playwright for .NET — o port oficial do Playwright; Selenium WebDriver.

Frameworks: DotnetSpider — framework na linha do Scrapy; Abot — um crawler configurável.


Java

Clientes HTTP: Apache HttpClient — o padrão maduro; OkHttp — um cliente moderno e rápido.

Parsers: Jsoup — a principal ferramenta para analisar HTML em Java, com seletores CSS muito práticos.

Automação de navegador: HtmlUnit — navegador headless escrito no próprio Java, com suporte parcial a JS; Selenium e Playwright for Java — controle de um navegador real.

Frameworks: WebMagic — framework no estilo Scrapy; Crawler4j — um crawler simples e rápido.


Ruby

Clientes HTTP: Faraday — cliente flexível com middleware; HTTParty — enxuto e simples.

Parsers: Nokogiri — o padrão para analisar HTML/XML em Ruby (CSS e XPath).

Automação de navegador: Ferrum — controle do Chrome via CDP; Watir e Selenium — navegador real.

Navegação e frameworks: Mechanize — segue links e trabalha com formulários (sem JS); Kimurai — framework na linha do Scrapy, com suporte a motores headless.


Rust

Clientes HTTP: reqwest — o principal cliente async; ureq — síncrono e simples.

Parsers: scraper — seletores CSS, em espírito semelhante ao BeautifulSoup/Cheerio; select — um parser de seletores alternativo.

Automação de navegador: fantoccini e thirtyfour — controle do navegador via WebDriver; headless_chrome e chromiumoxide — trabalho com o Chrome via DevTools Protocol.

Frameworks: spider — um crawler concorrente de alto desempenho.


Tabela comparativa de bibliotecas

Biblioteca Linguagem Tipo Executa JS Async / concorrência O que a distingue
requests Python Cliente HTTP Não Não A referência em simplicidade
httpx Python Cliente HTTP Não Sim Async + HTTP/2
curl_cffi Python Cliente HTTP Não Sim Falsificação da impressão digital TLS
BeautifulSoup Python Parser --- --- Baixa barreira de entrada
selectolax Python Parser --- --- O mais rápido com grandes volumes
Playwright Python Navegador Sim Sim Esperas automáticas, vários navegadores
Selenium várias linguagens Navegador Sim Parcial Veterano, comunidade enorme
Scrapy Python Framework Não* Sim O padrão do crawling em grande escala
cheerio JS / Node Parser --- --- Análise jQuery rápida de estáticos
Puppeteer JS / Node Navegador Sim Sim Controle nativo do Chrome
Playwright JS / Node Navegador Sim Sim Vários navegadores, API limpa
Crawlee JS / Node Framework Sim Sim Alternância automática HTTP/navegador
Guzzle PHP Cliente HTTP Não Sim Padrão de fato no PHP
Symfony DomCrawler PHP Parser --- --- Seletores CSS e XPath
Symfony Panther PHP Navegador Sim Não Navegador real para PHP
Roach PHP PHP Framework Não* Sim O equivalente do Scrapy em PHP
Colly Go Framework Não Sim Crawling concorrente veloz
goquery Go Parser --- --- Sintaxe jQuery
chromedp Go Navegador Sim Sim O padrão para dinâmicos em Go
Rod Go Navegador Sim Sim API moderna
libcurl C / C++ Cliente HTTP Não Sim O alicerce de todas as linguagens
lexbor C / C++ Parser --- --- Motor HTML/CSS veloz
HtmlAgilityPack C# Parser --- --- Tolera HTML «quebrado»
AngleSharp C# Parser --- --- Conforme o W3C, querySelector
PuppeteerSharp C# Navegador Sim Sim Puppeteer para .NET
Jsoup Java Parser --- --- O principal parser do Java
HtmlUnit Java Navegador Parcial Sim Navegador headless em Java puro
WebMagic Java Framework Não Sim Estilo Scrapy para Java
Nokogiri Ruby Parser --- --- O padrão de parsing em Ruby
Ferrum Ruby Navegador Sim Sim Controle do Chrome via CDP
Kimurai Ruby Framework Sim Sim Estilo Scrapy para Ruby
reqwest Rust Cliente HTTP Não Sim O principal cliente async
scraper Rust Parser --- --- Seletores CSS
thirtyfour Rust Navegador Sim Sim Controle via WebDriver
spider Rust Framework Sim Sim Alto desempenho

* Os frameworks Scrapy e Roach PHP, por si sós, trabalham apenas com HTML estático, mas a renderização de JS pode ser conectada como plugin (Scrapy, via scrapy-playwright; Roach, via Browsershot). O sinal «---» em uma coluna significa que o critério não se aplica a esse tipo de biblioteca.


Como montar um stack que funcione

A lógica resumida para escolher ferramentas conforme a tarefa:

  • Página estática ou requisição direta à API — bastam um cliente HTTP e um parser: por exemplo, requests + BeautifulSoup, Guzzle + DomCrawler, net/http + goquery.
  • O conteúdo é carregado por JavaScript, são necessários cliques e rolagem — recorra à automação de navegador: Playwright, Puppeteer, chromedp.
  • Milhares de páginas, execução regular, processamento e armazenamento de dados — é preciso um framework: Scrapy, Crawlee, Colly, Roach PHP.
  • O site bloqueia bots ativamente — adicione uma camada à parte: falsificação da impressão digital TLS (curl_cffi), modos stealth (nodriver, puppeteer-extra), proxies. Ela funciona por cima de qualquer uma das bibliotecas anteriores e não depende da linguagem escolhida.

Nos próximos materiais analisaremos bibliotecas específicas com exemplos práticos: coleta de dados, paginação e tratamento de bloqueios.