Como pegar parte do conteúdo (dados) de outro site com PHP

Aprenda a pegar parte do conteúdo (dados) de outros sites codificando em PHP, utilizando expressões regulares

Ir para o artigo

Pegar parte do conteúdo de outro site foi a tarefa que tive que fazer. Pensei que seria bem fácil, mas as coisas não saíram exatamente como eu planejava… Felizmente, consegui! Aprenda, você, também, como coletar informações de outros sites na internet.

A missão: pegar parte do conteúdo de um site

Hoje, no trabalho, tive a missão de “puxar” alguns dados de um site para “enxertar” num trecho de um web site que estou ajudando a desenvolver. Quando a tarefa me foi passada, logo lembrei de uma ocasião em que um amigo fez a mesma coisa (e, na época, ele me explicou, mais ou menos, com o fez). Pensei que seria muito fácil realizar a tarefa, mas, na hora, “lembrei” que não sou tão bom quanto o Gevã… rsrs

A solução: funções nativas do PHP e expressões regulares

Passei para pesquisas na web, procurando desesperadamente material de referência sobre expressões regulares (que, como verão, é um dos pilares para se conseguir pegar parte do conteúdo de outro site). Procura daqui, procura de lá, até bate-papo com o Gevã rolou para eu tentar entender melhor as tais expressões regulares. Até que, utilizando um pouco de “gambiarra”, consegui realizar meu objetivo.

A primeira coisa a se fazer, é pegar o conteúdo da página inteira que se quer “manipular”. Para tal, usa-se, por exemplo, a função file_get_contents(). Jogando o conteúdo do site numa variável, ficaria assim (vou fazer o exemplo com o mesmo site que tive que mexer):

$url = file_get_contents('http://www.bcb.gov.br/');

Pronto, agora a variável $url contém, em string, todo o conteúdo da página inicial do BCB.

Expressões regulares

Até aqui foi fácil; o difícil foi pegar somente o trecho da página que eu queria… Para isso, é preciso usar expressões regulares!

Caso você não saiba o que são expressões regulares, aí vai uma sucinta (e incompleta…) explicação de o que são expressões regulares, da Wikipédia:

Uma expressão regular, na Informática, define um padrão a ser usado para procurar ou substituir palavras ou grupos de palavras. É um meio preciso de se fazer buscas de determinadas porções de texto.

Com as expressões regulares é possível identificar trechos de palavras ou grupos de palavras que correspondem (“match“) a um determinado padrão (“pattern“), que é “regular”.

O PHP tem várias funções nativas para trabalhar com expressões regulares. Basta saber para o que cada uma serve e usar da meneira correta.

Bem, o próximo passo para resolução do problema é identificar o padrão que se quer extrair do site. No caso, eu precisei de uma tabela com algumas taxas cambiais (encontra-se à direita, no site do BCB). Observando o código fonte, vi que as informações estão em uma tabela (abordagem semanticamente correta!); além disso, esta tabela está envolta entre os comentários HTML “<!- – INICIO INDICADORES – ->” e “<!- – FIMINDICADORES – ->”. Isso é uma coisa boa, já que facilita bastante a “identificação do padrão”.

Explicando melhor: o padrão procurado, no caso, é tudo o que está entre os comentários HTML “<!- – INICIO INDICADORES – ->” e “<!- – FIMINDICADORES – ->”. Toda a tabela está aí, para a minha felicidade! :-)

Então, tudo o que é preciso fazer é utilizar uma função PHP (para o caso, escolhi a preg_match_all()) para procurar uma expressão regular dentro da variável $url, que contém toda a primeira página do site em que está a tabela.

Depois de muito tempo testando vááárias expressões regulares, cheguei à conclusão que faria uma pequena mutreta. Mas, antes, deixe-me mostrar como está o código até agora.

$url = file_get_contents('http://www.bcb.gov.br/');
preg_match_all('/ORES-->(.+)(.+)(.+)','(.+)','