Introdução: por que PHP é a ferramenta ideal para raspagem de dados
\n\nQuando 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\nNo 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\nSe você já quis automatizar a coleta de preços de concorrentes, notícias ou contatos — está no lugar certo. Vamos nessa!
\n\nRaspagem e scraping: qual a diferença?
\n\nAntes 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\nEm 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
Também podemos usar bibliotecas (falaremos delas mais adiante), mas para começar, as funções nativas são suficientes.
\n\nInstalação e preparação do ambiente
\n\nVocê precisará do PHP versão 7.4 ou superior com as extensões curl e dom. Para verificar se estão instaladas:
php -m | grep -E "curl|dom"\n\nSe a saída estiver vazia, instale-as pelo gerenciador de pacotes:
\n\nsudo apt install php-curl php-xml\n\nTudo pronto. Agora vamos criar nosso primeiro script de raspagem.
\n\nExemplo 1: Raspagem simples com cURL e DOMDocument
\n\nSuponha 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\nObserve 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.
Exemplo 2: Trabalhando com formulários e requisições POST
\n\nMuitas 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\nCom essa técnica, você pode raspar resultados de busca, fazer login em áreas restritas ou enviar dados para APIs que esperam POST.