Web scraping com Ajax: Guia completo

Autor :

Reagir :

Comentário

Extrair dados de um site que utiliza AJAX é mais complexo do que um web scraping clássico. O conteúdo não se encontra no HTML inicial: surge posteriormente, através de JavaScript. Um scraper simples não consegue, portanto, detetar nada, pelo que é necessário adotar uma abordagem adequada para recuperar esses dados dinâmicos.

Como funciona o web scraping num site que utiliza AJAX para carregar os seus dados em JavaScript
Como funciona o web scraping num site que utiliza AJAX. ©Christina para Alucare.fr

AJAX e web scraping: por que é que são diferentes?

a raspagem da web consiste em analisar o código HTML de uma página web para extrair automaticamente os dados úteis. Funciona muito bem num site estático. O problema surge com AJAX (para Asynchronous JavaScript and XML), uma tecnologia que permite carregar ou atualizar conteúdos sem recarregar toda a página.

Como funciona o AJAX?

O navegador (ou navegador) envia pequenas solicitações assíncronas ao servidor em segundo plano. O servidor devolve os dados, frequentemente no formato JSON. A página apresenta então essas informações em tempo real, sem recarregar o resto. É isso que torna a Web mais rápida e mais interativa.

Esquema de funcionamento do AJAX, que carrega dados em segundo plano sem recarregar toda a página web
Como funciona o web scraping num site que utiliza AJAX. ©Christina para Alucare.fr

Por que é que o scraping AJAX é mais complexo?

Quando um site utiliza AJAX, o conteúdo carregado não aparece no código-fonte HTML inicial. É injetado posteriormente pelo JavaScript, assim que a página for aberta. Um scraper clássico apenas recupera o conteúdo estático : por isso, ele não vê os dados dinâmicos adicionadas posteriormente.

Para os recuperar, precisas de uma ferramenta capaz de executar JavaScript. Na prática, existem três abordagens principais:

  • Reproduzir diretamente os solicitações AJAX, ou seja, as chamadas XHR que carregam os dados.
  • Conduzir um navegador sem cabeça Como Selenium Onde Playwright, que assegura a renderização (ou renderização) da página, tal como um navegador verdadeiro.
  • Recorrer a uma API de recolha de dados tudo-em-um.

Quais são os métodos e ferramentas de scraping AJAX?

Método 1: reproduzir as solicitações AJAX

É o método mais eficaz para recuperar dados dinâmicos. Em vez de carregar a página toda, tu intercepta os pedidos AJAX enviadas para o servidor e, em seguida, reproduzes-as diretamente para obter os dados brutos, muitas vezes no formato JSON.

Para identificar essas chamadas, abre as ferramentas de desenvolvimento do teu navegador e, em seguida, o separador Rede com o filtro XHR. Aí verás o URL exato do endpoint, os cabeçalhos e o formato da resposta.

Os pontos fortes desta técnica:

  • Muito rápida e leve, uma vez que não requer qualquer renderização completa da página.
  • Ela contorna os problemas relacionados com a renderização JavaScript.

As suas limitações:

  • Mais difícil de implementar que um navegador sem interface gráfica.
  • Ela pede uma análise minuciosa solicitações, cabeçalhos e parâmetros. Alguns sites exigem um token ou cabeçalhos obrigatórios.

No que diz respeito às bibliotecas, podes escolher consoante a linguagem:

Bibliotecas `requests` (Python) e `axios` (JavaScript) para reproduzir as solicitações AJAX
O Python e o JavaScript disponibilizam duas bibliotecas para executar pedidos AJAX: a requests e a axios. ©Christina para Alucare.fr

Método 2: utilizar um navegador sem interface gráfica

É o método mais simples para raspar páginas dinâmicas. Estás a automatizar um verdadeiro navegador da Web sem interface gráfica. Este apresenta a página exatamente como um utilizador o faria, executa o JavaScript, executa as chamadas AJAX e apresenta o conteúdo final.

Vantagens:

  • Estás a raspar exatamente o que o utilizador vê, incluindo o conteúdo carregado.
  • Isto é fácil de implementar, mesmo num site muito dinâmico.

Os inconvenientes:

  • Isto é mais lento do que um pedido direto.
  • Isto é que consome muitos recursos, porque estás a abrir um navegador completo.

As ferramentas mais utilizadas nesta abordagem:

  • Selenium : a ferramenta versátil, com uma longa história e bem documentada.
  • Playwright : moderno, rápido e compatível com vários navegadores.
  • Puppeteer : especializado em Chrome e Chromium.

Comparação dos navegadores headless Puppeteer, Playwright e Selenium para extrair dados de páginas AJAX
O Puppeteer, o Playwright e o Selenium automatizam um navegador sem interface gráfica para extrair dados de páginas dinâmicas. ©Christina para Alucare.fr

Podes combinar um navegador headless com BeautifulSoup (módulo bs4) : o navegador carrega a página e garante o renderização de JavaScript e, depois, tu parses o HTML gerado com a biblioteca.

Método 3: as API de scraping «tudo-em-um»

Algumas plataformas oferecem serviços completos de scrapingentre ferramentas gratuitas ou pagos disponíveis no mercado. Podemos citar Bright Data, ZenRows, ScrapingBee Onde Crawlbase. Estas gerem automaticamente o Renderização JavaScript, eles proxies e oextração de dados : envias um URL e elas devolvem-te o conteúdo final.

Vantagens:

  • Simples e fiáveis, mesmo em grande escala.
  • Não é necessário gerir nenhuma infraestrutura nem proxies da tua parte.

Os inconvenientes:

  • a o custo pode ser elevado dependendo do volume.
  • Tens menos controlo sobre o processo.

Interface da Bright Data, uma API de scraping «tudo-em-um» para sites AJAX
A Bright Data é uma API de scraping «tudo-em-um» que gere a renderização de JavaScript e os proxies. ©Christina para Alucare.fr

Como fazer scraping de um site com AJAX?

Eis como, na prática, extrair dados de um site que carrega os seus artigos através de AJAX, com dois exemplos de código em Python : um com requests, um com um navegador sem cabeça.

1. Identificar as solicitações AJAX nas ferramentas de desenvolvimento

O conteúdo carregado por AJAX não está no HTML inicial. É, portanto, necessário identificar a chamada de rede que vai buscar os dados.

  • Abre os ferramentas de desenvolvimento do teu navegador (tecla F12 ou clicar com o botão direito do rato e selecionar “Inspecionar”).
  • Vai ao separador Rede (Network) e, em seguida, atualize a página.
  • Observa os solicitações desencadeadas pelo site, incluindo as que carregam os artigos.
  • Filtrar por tipo de pedido XHR Onde fetch : são elas que recolhem os dados em segundo plano.

Clica na consulta correta para ver o seu URL, dele cabeçalhos e a sua resposta. Na maioria das vezes, a resposta está no formato JSON, por vezes em HTML.

2. Escolher o método de scraping

Depois de identificar a solicitação AJAX, tens duas opções.

  • Reproduzir a consulta : reproduzes diretamente a chamada em Python com a biblioteca requests. Recuperas os dados brutos em JSON ou em HTML, sem navegador. É o método mais rápido.
  • Navegador sem interface gráfica : se o site exigir a execução de JavaScript ou interações complexas (clique, deslocamento), utiliza Selenium Onde Playwright. A ferramenta carrega a página tal como um utilizador real o faria.

3. Reproduzir a solicitação AJAX com o `requests`

Eis o código básico para reproduzir a chamada identificada no separador «Rede».

import requests

# URL da solicitação AJAX identificada nas ferramentas de desenvolvimento
url = 'https://example.com/ajax-endpoint'

# Parâmetros da solicitação (a adaptar aos dados observados)
params = {
    'page': 1,
    'category': 'technology'
}

# Cabeçalhos a copiar a partir do separador 'Rede' (User-Agent, Referer, token...)
headers = {
    'User-Agent': 'Mozilla/5.0',
    'X-Requested-With': "XMLHttpRequest"
}

# Envio da solicitação GET
response = requests.get(url, params=params, headers=headers)

# Verificar o estado da resposta
if response.status_code == 200:
    data = response.json()
    print(data)
else:
    print(f"Erro {response.status_code}")

Detalhe linha a linha:

  • import requests : carrega a biblioteca que envia os pedidos HTTP.
  • url : substitua este endereço pelo endpoint AJAX indicado no separador «Rede».
  • headers : copia os cabeçalhos apresentados no separador «Rede». Alguns sites exigem um User-Agent, uma Referer ou um token CSRF para aceitar o pedido.
  • UMA estado 200 significa que o pedido foi bem-sucedido.
  • response.json() converte a resposta JSON num dicionário Python.
  • print(data) : apresenta os dados extraídos (lista de artigos, preços, etc.).
  • else : apresenta o código de erro caso a chamada falhe (por exemplo 403 Onde 404).

4. Extrair dados com um navegador headless (Selenium + BeautifulSoup)

Quando não basta reproduzir a consulta, um navegador sem interface gráfica executa o JavaScript por ti. Depois, obténs o HTML gerado e, em seguida, parses com BeautifulSoup (módulo bs4).

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import time

# Iniciar o Chrome no modo headless (sem interface)
options = Options()
options.add_argument("--headless")
driver = webdriver.Chrome(options=options)

# Abrir a página que carrega o seu conteúdo via AJAX
driver.get("https://example.com")

# Aguardar que o JavaScript carregue os dados
time.sleep(3)

# Analisar o HTML renderizado com o BeautifulSoup
soup = BeautifulSoup(driver.page_source, "html.parser")
articles = soup.find_all("div", class_="article")

for article in articles:
    print(article.get_text())

driver.quit()

Aqui, Selenium é um piloto a sério Chrome que assegura o renderização da página, e driver.page_source retorna o HTML assim que o conteúdo AJAX for carregado. Playwright e Puppeteer funcionam segundo o mesmo princípio, mas com uma sintaxe diferente.

5. Extrair os dados do JSON ou do HTML gerado

Depois de obter a resposta, isola as informações úteis de acordo com o seu formato.

  • Resposta em JSON : utiliza response.json() para obter um dicionário Python e, em seguida, aceder aos valores através das respetivas chaves.
  • Resposta em HTML : passa por BeautifulSoup (módulo bs4) com find Onde select para selecionar os elementos através da sua classe ou do seu ID.

Que método de scraping AJAX escolher?

Cada abordagem tem os seus pontos fortes, dependendo do teu nível e do teu projeto. Aqui fica uma comparação rápida.

Método Velocidade Complexidade Custo Ideal para…
Reprodução da solicitação Muito rápido Elevado Fraco Scraping em grande escala, dados estruturados
Navegador sem interface gráfica Lenta Significa Fraco Sites complexos, projetos rápidos, principiantes
API de recolha de dados Velozes Muito fraco Elevado Projetos críticos, sem manutenção de infraestruturas

Na prática: começa pela reprodução da consulta se o endpoint AJAX devolver JSON válido. Passa para o navegador sem cabeça assim que o JavaScript se tornar imprescindível.

Quais são os desafios do scraping AJAX e suas soluções?

Extrair dados de um site em AJAX levanta problemas que o scraping clássico não enfrenta. Eis os principais desafios e, sobretudo, como os contornar.

Desafio 1: o conteúdo que não se vê à primeira vista

Quando carregas uma página AJAX, o O código HTML inicial está frequentemente vazio : os dados só chegam depois da execução do JavaScript. A solução é utilizar um navegador sem interface gráfica, como Selenium, Playwright Onde Puppeteer, que assegura o renderização carregamento completo da página antes de ler o seu conteúdo.

Desafio 2: as consultas simples que falham

Nem sempre basta reproduzir a chamada AJAX. Muitos sites protegem a sua API, e a tua consulta pode devolver uma erro 403 enquanto o navegador, por seu lado, recebe sim a resposta. Faltam informações na tua solicitação. Na prática, é frequentemente necessário:

  • Copiar os headers obrigatórias visíveis no separador «Network» (como User-Agent Onde Referer).
  • Adicionar o ficha CSRF ou os cookies de sessão, quando o servidor os exige.
  • Verificar o código de estado da resposta para identificar rapidamente o que está a causar o problema.

Desafio 3: a gestão dos prazos de carregamento

Os dados carregados por AJAX podem demorar a aparecer. Se o scraper ler a página demasiado cedo, não encontra nada. Duas abordagens, consoante a necessidade:

  • A pausa fixa (um sleep (em segundos) antes de carregar a página. Simples, mas pouco fiável.
  • A suspensão condicional, muito mais limpo, através dos esperas do Selenium : o’expectativa implícita aguarda automaticamente que os elementos fiquem disponíveis, enquanto o’expectativa explícita aguarda precisamente um elemento ou uma condição definida antes de prosseguir.

Desafio 4: fazer scraping em grande escala sem ser bloqueado

Em algumas páginas, não há problema nenhum. Mas se estiveres a extrair dados de milhares de páginas, o site acaba por te detetar e bloquear-te. Para aguentares a distância:

  • Faz encaminhar os teus pedidos através de proxies para variar os endereços IP.
  • Respeita um intervalo entre as chamadas em vez de enviar tudo de uma só vez.
  • Gere a paginação e a deslocamento infinito de forma gradual, como um verdadeiro visitante.

O segredo é manter a discrição. Quanto mais o teu comportamento se assemelhar ao de um ser humano, menor será o risco de seres desconectado.

Perguntas frequentes

É possível utilizar o BeautifulSoup para extrair dados de um site com AJAX?

Não diretamente. BeautifulSoup é uma biblioteca de análise estática : ela lê apenas o HTML carregado inicialmente. Como o AJAX insere o conteúdo através do JavaScript, tens de complementá-la com uma ferramenta capaz de executar esse JavaScript, como Selenium Onde Playwright. O navegador headless recupera o HTML renderizado e, em seguida, passas esse conteúdo para BeautifulSoup para o análise sintática.

Outra opção: interceptar diretamente os solicitações AJAX e obter a resposta JSON, que muitas vezes é mais fácil de processar do que o HTML.

Como gerir erros de autenticação ou cabeçalhos de sessão num site AJAX?

Um site protegido pode devolver um erro 401 (não autorizado) ou 403 (proibido) quando as tuas consultas não incluem os elementos corretos Biscoitos ou cabeçalhos HTTP. A solução: interceptar essas informações durante a navegação inicial e, em seguida, reutilizá-los nas tuas solicitações AJAX simuladas. Muitos sites também exigem um token CSRF ou um cabeçalho X-Requested-With, sem o qual o servidor rejeita o pedido. É precisamente por isso que um simples pedido requests encalha onde o navio passa.

Como fazer scraping de um site com rolagem infinita ou um botão “Carregar mais”?

O carregamento infinito é uma forma de carregamento AJAX. Para o automatizar, tens duas abordagens:

  • Identificar a solicitação AJAX que carrega o conteúdo adicional e, em seguida, o reproduz diretamente (geralmente um URL com um parâmetro de paginação).
  • Ou simular cliques no botão "Carregar mais" através de um navegador sem interface gráfica, como Selenium Onde Puppeteer, até recuperar todos os dados.

Existem extensões do Chrome para scraping AJAX?

Sim. Diversos Extensões do Chrome facilitam o scraping AJAX para necessidades simples, sem ter de escrever uma única linha de código. As mais conhecidas:

  • Web Scraper
  • Data Miner
  • Instant Data Scraper

Extensão do Chrome «Instant Data Scraper» que apresenta os dados extraídos de uma página web que utiliza AJAX.
Instant Data Scraper, uma extensão do Chrome para recolher dados de páginas da Web sem precisar de programar. ©Christina para Alucare.fr

Qual é a diferença entre um “wait” explícito e um implícito no Selenium ou no Playwright?

  • UMA espera implícita é uma espera global, aplicada a todos os elementos. O teu script aguarda um determinado período de tempo antes de gerar um erro, caso um elemento não apareça.
  • UMA espera explícita é uma espera condicional, direcionada a um elemento específico. Espera apenas até que uma condição seja cumprida.

Na prática, o espera explícita é preferível: evita atrasos desnecessários e reduz os erros quando o conteúdo AJAX demora a carregar.

Resumindo, fazer scraping com AJAX requer um pouco mais de jeito, mas com os métodos certos, nada te escapa. E tu? Que método usas para fazer scraping em sites AJAX? Partilha as tuas dicas nos comentários.

👍A sua opinião
O artigo é informativo
O artigo é objetivo
O artigo responde à minha pergunta
O conteúdo está atualizado
Encontrou algum erro? Diz-nos onde!

Gostou? Partilhe-o!

Este conteúdo é originalmente em francês (Ver o editor logo abaixo). Foi traduzido e revisto em várias línguas utilizando o Deepl e/ou a API do Google Translate para oferecer ajuda no maior número possível de países. Esta tradução custa-nos vários milhares de euros por mês. Se não estiver 100 % perfeita, deixe-nos um comentário para que a possamos corrigir. Se estiver interessado em rever e melhorar a qualidade dos artigos traduzidos, envie-nos um e-mail utilizando o formulário de contacto!
Agradecemos os seus comentários para melhorar o nosso conteúdo. Se quiser sugerir melhorias, utilize o nosso formulário de contacto ou deixe um comentário abaixo. Os seus comentários ajudam-nos sempre a melhorar a qualidade do nosso sítio Web Alucare.fr


Alucare é um meio de comunicação social independente. Apoie-nos adicionando-nos aos seus favoritos do Google News:

Publicar um comentário no fórum de discussão