Como clonar um site inteiro com PHP. 😱 Mini tutorial Web Scraping passo a passo na prática!
Você sabia que o PHP consegue copiar toda a estrutura de um site para fins de estudo? 🤯 Neste guia completo, vamos explorar como utilizar recursos nativos do PHP para baixar uma página HTML, localizar automaticamente arquivos CSS, JavaScript e imagens, fazer o download desses arquivos e reorganizar toda a estrutura localmente. Uma habilidade essencial para desenvolvedores que trabalham com automação, integração de sistemas e Web Scraping.
Web Scraping com PHP puro: Como clonar sites para estudo usando cURL, DOMDocument e DOMXPath
O objetivo NÃO é incentivar a cópia de conteúdo de terceiros. O foco deste exemplo é demonstrar técnicas importantes de programação muito utilizadas por desenvolvedores que trabalham com automação, integração de sistemas, migração de aplicações, análise de páginas HTML e Web Scraping.
Como clonar um site inteiro com PHP. 😱 Mini tutorial Web Scraping passo a passo na prática!
"O PHP não é apenas uma linguagem para criar sites — ele também é uma ferramenta poderosa para automação, integração e Web Scraping. Com recursos nativos como cURL, DOMDocument e DOMXPath, é possível extrair, processar e reorganizar conteúdo da web de forma eficiente e profissional."
⚠️ AVISO LEGAL IMPORTANTE
Este conteúdo foi desenvolvido exclusivamente para fins educacionais e de estudo. O objetivo é demonstrar técnicas de programação e manipulação de documentos. Utilize esse conhecimento de forma ética, apenas em ambientes autorizados e respeitando sempre os termos de uso dos sites envolvidos.
O que é Web Scraping e por que aprender?
O Web Scraping é uma técnica de extração de dados de sites e páginas da web. Ele permite que desenvolvedores coletem informações de forma automatizada, processem dados e os utilizem em aplicações, análises e sistemas.
Neste artigo, vamos construir um clone de site utilizando apenas PHP puro, sem frameworks ou bibliotecas externas. O projeto vai:
- Baixar uma página HTML completa
- Localizar automaticamente arquivos CSS, JavaScript e imagens
- Fazer download de todos os assets
- Reorganizar toda a estrutura localmente
- Gerar uma versão funcional do site em seu computador
Tecnologias utilizadas no projeto
cURL
Requisições HTTP avançadas para baixar conteúdo
DOMDocument
Interpretação e navegação no HTML
DOMXPath
Localização precisa de elementos no DOM
Manipulação de Arquivos
Organização e salvamento de assets
Estrutura do projeto PHP
O projeto é composto por 4 arquivos principais:
Código completo do projeto
1. consts.php — Configuração da URL
<?php
const URL = 'https://www.php.net/';
Este arquivo define a URL que será clonada. Para testar com outros sites, basta alterar esta constante.
2. lib.php — Funções auxiliares
<?php
function baixar($url)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$html = curl_exec($ch);
curl_close($ch);
return $html;
}
function baixarArquivo($url, $pasta)
{
// Resolver URL completa
if (!preg_match("/^https?:\/\//", $url)) {
if (strpos($url, '//') === 0) {
$url = 'https:' . $url;
}
}
// Baixar conteúdo
$conteudo = baixar($url);
if (empty($conteudo)) {
return false;
}
// Pegar nome do arquivo
$nome = basename(parse_url($url, PHP_URL_PATH));
// Se não tem extensão, tentar descobrir
if (empty($nome) || !strpos($nome, '.')) {
$tipo = mime_content_type($url);
if ($tipo) {
$extensoes = [
'image/jpeg' => 'jpg',
'image/png' => 'png',
'image/gif' => 'gif',
'image/webp' => 'webp',
'image/svg+xml' => 'svg'
];
$ext = $extensoes[$tipo] ?? 'jpg';
} else {
$ext = match ($pasta) {
'css' => 'css',
'js' => 'js',
'img' => 'jpg',
default => 'bin'
};
}
$nome = uniqid() . '.' . $ext;
}
// Salvar arquivo
$caminho = __DIR__ . "/assets/$pasta/" . $nome;
file_put_contents($caminho, $conteudo);
return $nome;
}
3. export.php — Script principal
<?php
require_once(__DIR__ . "/consts.php");
require_once(__DIR__ . "/lib.php");
// Criar pastas
$pastas = ['css', 'js', 'img'];
foreach ($pastas as $pasta) {
$caminho = __DIR__ . "/assets/$pasta";
if (!is_dir($caminho)) {
mkdir($caminho, 0777, true);
}
}
$html = baixar(URL);
// Carregar HTML
$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($html);
libxml_clear_errors();
$xpath = new DOMXPath($dom);
// Processar CSS
foreach ($xpath->query("//link[@rel='stylesheet']") as $link) {
$href = $link->getAttribute('href');
if ($href) {
$nome = baixarArquivo($href, 'css');
if ($nome) {
$link->setAttribute('href', "assets/css/$nome");
}
}
}
// Processar JS
foreach ($xpath->query("//script[@src]") as $script) {
$src = $script->getAttribute('src');
if ($src && strpos($src, 'http') !== 0 && strpos($src, '//') !== 0) {
$nome = baixarArquivo($src, 'js');
if ($nome) {
$script->setAttribute('src', "assets/js/$nome");
}
}
}
// Processar Imagens
foreach ($xpath->query("//img[@src]") as $img) {
$src = $img->getAttribute('src');
if ($src) {
$nome = baixarArquivo($src, 'img');
if ($nome) {
$img->setAttribute('src', "assets/img/$nome");
}
}
}
// Salvar HTML
file_put_contents(__DIR__ . "/index.php", $dom->saveHTML());
echo "Cópia concluída!";
Explicando o código passo a passo
1. A função baixar() com cURL
A função baixar() utiliza a biblioteca cURL do PHP para fazer requisições HTTP. As opções configuradas são:
CURLOPT_RETURNTRANSFER: Retorna o conteúdo como stringCURLOPT_FOLLOWLOCATION: Segue redirecionamentosCURLOPT_USERAGENT: Define um User-Agent válidoCURLOPT_SSL_VERIFYPEER: Desabilita verificação SSL para evitar erros
2. A função baixarArquivo()
Esta função é responsável por:
- Resolver URLs relativas para URLs absolutas
- Baixar o conteúdo do arquivo
- Determinar o nome e extensão do arquivo
- Salvar o arquivo na pasta correta
- Retornar o nome do arquivo salvo
3. DOMDocument e DOMXPath
O DOMDocument carrega o HTML baixado e o transforma em uma estrutura de árvore DOM. O DOMXPath permite navegar e localizar elementos específicos:
//link[@rel='stylesheet']: Localiza todas as folhas de estilo//script[@src]: Localiza todos os scripts//img[@src]: Localiza todas as imagens
⏱️ Capítulos do vídeo
- 00:00 — Introdução: Coisas proibidas para DEVs PHP
- 00:03 — Aviso: Uso estritamente didático
- 00:06 — Estrutura do projeto PHP
- 00:13 — Conhecendo a Library e funções de download
- 00:21 — Executando o script de exportação
- 00:24 — Resultado final: Cópia concluída com sucesso
- 00:32 — Encerramento e convite para seguir
🔗 Projeto completo no GitHub
GitHub - ClonePHPConclusão
O Web Scraping com PHP puro é uma habilidade poderosa para qualquer desenvolvedor. Este projeto demonstra como utilizar recursos nativos da linguagem para:
- ✅ Fazer requisições HTTP com cURL
- ✅ Processar HTML com DOMDocument
- ✅ Localizar elementos com DOMXPath
- ✅ Baixar e organizar assets automaticamente
- ✅ Construir um projeto estruturado e reutilizável
💡 Lembre-se: O Web Scraping deve ser utilizado com responsabilidade e ética. Sempre respeite os termos de uso dos sites e utilize o conhecimento para aprender e evoluir como desenvolvedor.
🤔 O que você achou?
💬 Quer aprender JavaScript do ZERO? Comece agora a escrever seu primeiro código e seus fundamentos!
❓ FAQ: Perguntas Frequentes sobre Web Scraping com PHP
🎬 Assista ao Vídeos completo sobre Refatoração
O vídeo foi feito em Javascript mais o conceito pode ser utilizado em qualquer outra linguagem de programação..
🎬 Assista ao Vídeos completo sobre Refatoração
🔗 Conecte-se Comigo
💬 Você já utilizou PHP para automação ou Web Scraping? Qual biblioteca você costuma utilizar? Prefere PHP puro ou Framework? Escreva sua experiência nos comentários! 👇
#PHP #PHP8 #WebScraping #cURL #DOMDocument #DOMXPath #Programacao #DesenvolvimentoWeb #Codigo #Backend #Programador #DicasDeProgramação #RogerioPontesTI