Muitas vezes vi programadores perguntando como se faz para um script PHP obter os links de um documento HTML
ou então as imagens ou outro elemento qualquer. Este artigo mostra como percorrer elementos de um documento HTML e capturá-los de acordo com seu nome ou atributo. Para tanto, é utilizada a extensão DOM.Para obter todos elementos de um documento HTML você tem duas opções: (i) realizar buscas via expressão regular, ou (ii) utilizar algum recurso capaz de ler todo o documento e estruturá-lo na forma de um objeto (ou outra estrutura de dados organizada).
Usar expressões regulares pode ser simples, em alguns casos. No entanto, a segunda opção tende a ser mais segura. Já vimos que a extensão SimpleXML é capaz de estruturar um XML em um objeto de fácil manipulação. No entanto, nem todas páginas são XHTML válidas. Para ler um documento HTML 4.01, por exemplo, ela pode não funcionar. Por outro lado, a extensão DOM é capaz de ler um documento HTML e, inclusive, ignorar alguns erros de sintaxe. DOM é uma especificação definda pela W3C e normalmente é implementada em JavaScript nativamente. Em PHP, as classes e métodos tem o mesmo nome e funcionamento, mudando apenas a sintaxe da linguagem (para um objeto invocar um método, por exemplo, usa-se "." em JavaScript, mas usa-se "->" em PHP).
Veja um exemplo de como percorrer os links e as imagens de uma página e exibir o conteúdo do atributo "href" dos links e "src" das imagens:
$dom = new DOMDocument(); $dom->loadHTMLFile('teste.html'); // Consultando os links $links = $dom->getElementsByTagName('a'); foreach ($links as $link) { echo $link->getAttribute('href').PHP_EOL; } // Consultando as imagens $imgs = $dom->getElementsByTagName('img'); foreach ($imgs as $img) { echo $img->getAttribute('src').PHP_EOL; }
O método loadHTMLFile serve para ler um documento HTML no próprio servidor ou em um endereço web externo (caso o PHP esteja devidamente configurado para permitir isso). Já o método loadHTML recebe um código HTML diretamente.
A extensão DOM possui muitas outras funcionalidades úteis. Vale a pena dar uma olhada na documentação da extensão DOM.
5 comentários
Muito bom, testando, inspirado por algum filme???
Obrigado, Vine.
Esse post foi inspirado pelas várias pessoas que vi perguntando sobre isso. Se tiver sugestão de assuntos, pode postar ali na caixa de sugestões ali do lado.
Perfeito
Cara e como eu faço para acessar os elementos html em uma outra página php ?
Olá, Anônimo
No método "loadHtmlFile" você pode passar a URL da página desejada. Só precisa se assegurar que seu PHP esteja habilitado para fazer consultas a outras URLs com a diretiva de configuração "allow_url_fopen" (no seu php.ini).
Outra possibilidade é obter o conteúdo HTML da página (com CURL, por exemplo), e passar o HTML obtido para o método "loadHtml".
Postar um comentário
Nota: fique a vontade para expressar o que achou deste artigo ou do blog.
Dica: para acompanhar as respostas, acesse com uma conta do Google e marque a opção "Notifique-me".
Atenção: o blogger não permite inclusão de tags nos comentários, por isso, use algum site externo para postar seu código com dúvidas e deixe o link aqui. Exemplo: pastebin.com