Raspagem de dados em PHP: do básico ao profissional

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: por que PHP é a ferramenta ideal para raspagem de dados

\n\n

Quando falamos em raspagem de sites, muitos pensam imediatamente em Python com BeautifulSoup ou Scrapy. Mas sejamos honestos: o PHP está presente em praticamente todos os servidores, e se o seu projeto já roda em PHP — trazer todo um ecossistema Python só para uma tarefa de raspagem não faz sentido. O PHP lida muito bem com coleta de dados, especialmente quando você precisa processar HTML ou JSON rapidamente, consumir APIs ou extrair conteúdo de dezenas de páginas.

\n\n

No site pythonlib.ru estamos acostumados a falar sobre Python, mas hoje abriremos uma exceção. Porque PHP não é apenas uma linguagem para "sites de cartão de visita". É uma ferramenta poderosa para web scraping, que sabe trabalhar com cURL, DOMDocument, XPath e até simular o comportamento de um navegador. Neste artigo, vamos explorar com exemplos reais como raspar sites em PHP, evitar bloqueios e processar conteúdo dinâmico.

\n\n

Se você já quis automatizar a coleta de preços de concorrentes, notícias ou contatos — está no lugar certo. Vamos nessa!

\n\n

Raspagem e scraping: qual a diferença?

\n\n

Antes de escrever código, vamos esclarecer os termos. Raspagem de dados em PHP é o processo de extrair informações estruturadas de HTML, XML ou JSON. Já scraping de dados em PHP é um conceito mais amplo, que inclui baixar a página, contornar proteções e extrair os dados. Em palavras simples: raspagem é "ler", scraping é "minerar".

\n\n

Em PHP, para fazer scraping, precisamos de duas ferramentas principais:

\n
    \n
  • cURL — para enviar requisições HTTP e receber respostas do servidor
  • \n
  • DOMDocument ou SimpleXML — para analisar o HTML/XML obtido
  • \n
\n\n

Também podemos usar bibliotecas (falaremos delas mais adiante), mas para começar, as funções nativas são suficientes.

\n\n

Instalação e preparação do ambiente

\n\n

Você precisará do PHP versão 7.4 ou superior com as extensões curl e dom. Para verificar se estão instaladas:

\n\n
php -m | grep -E "curl|dom"
\n\n

Se a saída estiver vazia, instale-as pelo gerenciador de pacotes:

\n\n
sudo apt install php-curl php-xml
\n\n

Tudo pronto. Agora vamos criar nosso primeiro script de raspagem.

\n\n

Exemplo 1: Raspagem simples com cURL e DOMDocument

\n\n

Suponha que queremos coletar os títulos de artigos de um blog. Vamos escrever um código simples, mas funcional:

\n\n
<?php\n// URL para raspagem\n$url = 'https://exemplo-blog.com';\n\n// Inicializa cURL\n$ch = curl_init($url);\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\ncurl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);\ncurl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36');\n\n$html = curl_exec($ch);\ncurl_close($ch);\n\n// Cria DOMDocument e carrega o HTML\n$dom = new DOMDocument();\nlibxml_use_internal_errors(true); // Ignora erros de parsing HTML\n$dom->loadHTML($html);\nlibxml_clear_errors();\n\n// Usa XPath para buscar títulos h2\n$xpath = new DOMXPath($dom);\n$titles = $xpath->query('//h2');\n\nforeach ($titles as $title) {\n    echo $title->nodeValue . "\\n";\n}\n?>
\n\n

Observe que definimos um User-Agent — é a proteção mínima contra bloqueios. Sem ele, muitos sites retornam erro 403. Também usamos CURLOPT_FOLLOWLOCATION para seguir redirecionamentos automaticamente.

\n\n

Exemplo 2: Trabalhando com formulários e requisições POST

\n\n

Muitas vezes os dados estão escondidos atrás de um formulário de busca ou login. A raspagem em PHP permite simular o envio do formulário:

\n\n
<?php\n$url = 'https://exemplo.com/busca';\n$postData = http_build_query([\n    'query' => 'PHP scraping',\n    'submit' => 'Buscar'\n]);\n\n$ch = curl_init($url);\ncurl_setopt($ch, CURLOPT_RETURNTRANSFER, true);\ncurl_setopt($ch, CURLOPT_POST, true);\ncurl_setopt($ch, CURLOPT_POSTFIELDS, $postData);\ncurl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');\n\n$response = curl_exec($ch);\ncurl_close($ch);\n\n// Processa a resposta com DOMDocument...\n?>
\n\n

Com essa técnica, você pode raspar resultados de busca, fazer login em áreas restritas ou enviar dados para APIs que esperam POST.

Blogs

Book Recommendations