Como pegar parte do conteúdo (dados) de outro site com PHP
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):
1 | $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.
1 2 | $url = file_get_contents('http://www.bcb.gov.br/'); preg_match_all('/ORES-->(.+)<!--/s', $url, $conteudo); |
Explicando: o primeiro argumento da função, é o padrão que quero procurar; o segundo, é onde vou procurar; o terceiro, guarda em um array todas as ocorrências da expressão procurada. Para a maioria dos casos, talvez já estivesse bom, por aqui; entretanto, no problema que tive, ainda é preciso mais algumas linhas de código.
No momento, a variável $conteudo contém um array com as ocorrências encontradas. Usando um print_r(), descobri em qual posição, exatamente, o que eu procurava estava: $conteudo[0][0].
Fazendo uma “mutreta”
Para fazer a tal “mutreta”, jogo o conteúdo desta posição da matriz para uma outra variável (para facilitar a manipulação).
1 2 3 | $url = file_get_contents('http://www.bcb.gov.br/'); preg_match_all('/ORES-->(.+)<!--/s', $url, $conteudo); $exibir = $conteudo[0][0]; |
Havia trechos do que me foi retornado (ou seja, da tabela com as taxas cambiais) que eu não queria que aparecessem no site (como alguns links). Então, resolvi retirá-los através da função str_replace(), que substitui trechos de strings. É possível, como argumento, passar um array. Então, por enquanto e quase no fim, o código está assim:
1 2 3 4 5 | $url = file_get_contents('http://www.bcb.gov.br/'); preg_match_all('/ORES-->(.+)<!--/s', $url, $conteudo); $exibir = $conteudo[0][0]; $retirar = array('mais moedas','atas Copom','mais detalhes','ORES-->','<!--'); $exibir = str_replace($retirar, '', $exibir); |
Ou seja: sempre que aparecer alguns dos itens do array $retirar em $exibir, será substituído por “” (nada…). Perceba que os últimos dois elementos do array são “poluições” desnecessárias, que vieram devido à minha preguiça de fazer uma expressão regular mais elaborada. :-)
Finalizando…
Depois disso, basta mandar exibir na tela o que “sobrou” do conteúdo retira da página inicial do site do BCB.
1 2 3 4 5 6 | $url = file_get_contents('http://www.bcb.gov.br/'); preg_match_all('/ORES-->(.+)<!--/s', $url, $conteudo); $exibir = $conteudo[0][0]</span>; $retirar = array('mais moedas','atas Copom','mais detalhes','ORES-->','<!--'); $exibir = str_replace($retirar, '', $exibir); echo $exibir; |
E se o servidor não permite a função file_get_contents() ?
Há muitos servidores que, por motivos diversos (principalmente "segurança"), não permitem que se utilize a função file_get_contents(). Para esses casos, é possível colocar numa variável alguma página externa utilizando o seguinte código (depois você procura as explicações no manual oficial do PHP):
1 2 3 4 5 6 7 | $ch = curl_init(); $timeout = 0; curl_setopt($ch, CURLOPT_URL, 'O_SITE_QUE_VOCE_QUER'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $conteudo = curl_exec ($ch); curl_close($ch); |
Então, o conteúdo da página "O_SITE_QUE_VOCE_QUER" estará na variável $conteudo.
Conclusão
Então, pessoal, para se retirar uma parte do conteúdo de um web site (utilizando PHP), os passos são:
- Saber em qual página está o conteúdo que se precisa;
- Jogar o conteúdo do site em uma variável;
- Extrair o trecho que se quer utilizando expressões regulares;
- Se preciso, cortar mais algumas coisas do resultado da ER;
- Exibir em tela o resultado final.
O grande pulo do gato, neste caso, é saber mexer com expressões regulares; coisa que, sinto informar, só se aprende fazendo! E fazendo muito! Leia as referências no fim deste artigo e procure na internet mais material a respeito.
Uma outra coisa importante é o seguinte: tenha sempre em mente que, como você está pegando o conteúdo de um site, caso este altere sua estrutura, muito provavelmente será preciso alterar a expressão regular, também.
Fique ciente de uma coisa: se você, desenvolvedor web, ainda não precisou usar expressões regulares, pode ter certeza de que sua hora vai chegar!
Referências Nacionais
Expressões Regulares - Guia de Consulta Rápida
Este é o guia de Aurélio Marinho Jargas, excelente para se aprender expressões regulares e para se consultar nos momentos de aperto!
Artigo do Viva o Linux, de Marcelo Santos Araujo, com uma introdução sobre expressões regulares.
Referências Internacionais
Site especialmente dedicado às expressões regulares.
Biblioteca virtual de expressões regulares.
Para testar expressões regulares em tempo real!
Excelente, sr.Tárcio! Você pegou um limão e fez uma limonada. O artigo ficou muito bom, parabéns!
Muito obrigado, Seu Gevã!
50% é crédito seu! =D
Abraços!
Vale lembrar que com a utilização de XHTML na estrutura das páginas isso é desnecessário, uma vez que a extração dos dados pode ser feita exatamente da mesma maneira que se extrai os dados de um XML.
@ Rafael Eduardo Kassner
Oi, Rafael, tudo bem?!
Muito interessante isso que você falou! Poderia dar um exemplo para podermos aprender?
Abraços!
Valeu a mão!
Quem quiser se aprofundar, vai aí um ótimo link sobre ER: http://guia-er.sourceforge.net/
Pra mim foi muito útil!
@ Juliano
Obrigado por relembrar o site do Aurélio. Melhor, mesmo, é comprar o livrinho de referência que ele fez mas, para consultas online, é muito bom!
Obrigado pela visita!
Muito bom msm o tuto.
consegui fazer direitinho!
agora tem uma coisa, eu n to conseguindo colocar o conteudo salvo na minha página.
como que eu falo isso?
eu estou simplesmente colcando o codigo php na minha index.html
estou errado? qual a maneira certa de fazer isso?!
@ Felipe Conde
Na verdade, Felipe, não há "conteúdo salvo"; como o script pega o conteúdo de outro site, ele é inserido dinamicamente, então, ele se altera caso o conteúdo do "site alvo" seja alterado.
Quanto ao local onde será exibido, você mesmo define. Seguindo o exemplo do artigo, caso esteja usando com file_get_contents(), o conteúdo fica na variável $exibir; caso esteja usando curl(), então é em $conteudo.
Show de bola o tuto.
Fui tentar fazer uma adaptação para a cotação agropecuaria (http://www.ruralnetwork.com.br/commodities2_canal_boi.asp), mas da o seguinte erro: failed to open stream: Invalid argument.
Poderia me da uma ajudinha?
Segue o codigo:
$url = file_get_contents ("https://www.ruralnetwork.com.br/commodities2_canal_boi.asp");
preg_match_all('/data:(.+)/', $url, $cotacao);
print_r ($cotacao);
Vlw´s
@ Gabriel
Gabriel, provavelmente o fato de ser "https" deve influenciar nisso. Dê uma olhadinha nesta discussão para começar a busca pela informação! ;-)
Boa sorte e obrigado por comentar!
Olá Tárcio, tudo tranquilo?
Então, muito bom o exemplo. Agora estou com uma dúvida:
Tenho um conteúdo que é apresentado da seguinte maneira:
div
ContentTemplate>
class="preformatted"
pre
br
O texto aqui dentro interessa, texto aqui dentro interessa texto aqui dentro interessa texto aqui dentro interessa texto aqui dentro interessa texto aqui dentro interessa texto aqui dentro interessa .
br
ESTA LINHA NAO INTERESSA ESTA LINHA NAO INTERESSA
ESTA LINHA NAO INTERESSA ESTA LINHA NAO INTERESSA
pre
div
É possível pegar apenas o conteúdo entre as tags br ??? Lembrando que tenho outras tags pelo corpo da página.
Utilizei até o momento o código :
$url = file_get_contents('http://meusite.com.br');
preg_match_all('/ContentTemplate(.+)/s', $url, $conteudo);
$exibir = $conteudo[0][0];
$retirar = array('Filtro1, Filtro2, Filtro3');
$exibir = str_replace($retirar, '', $exibir);
echo $exibir;
@ Rodrigo
É possível, sim, Rodrigo. Basta utilizar a mesma "máscara" para pegar tudo que está entre os elementos que você quer. Ficaria algo como:
preg_match_all('/br(.+)br/s', $url, $conteudo);
Sendo que este "br" é a tag de quebra de linha – só que não deu pra colocar, se não ele efetivamente quebraria a linha! ;-)
Em vendo seu post primeiro meus parabens..
Criei seu exemplo e gostei mas fiquei curioso pra saber como o pessoal faz pra pegar vi num site http://blogblogs.com.br o pessoal cadastra nele e colo o link e o site faz uma cópia do conteudo… mas somente do texto ( acho que o pessoal chama de POST ). Como eles conseguem tal façanha..?
Estou a tentar tirar os cinemas do site http://cinema.sapo.pt/em-cartaz/distrito/aveiro/c… e não sei como ei-de ligar a base de dados para fazer a inserção dos conteudos retirados. Será que me poderiam ajudar…urgentemente…………..
Alguem viu o meu post e sabe qual a solução?
@ Charles
Seguindo o "foco" deste post, poderia ser, por exemplo, pegar tudo o que está entre as tags de parágrafo ("p") ou eles fazem uma série de IFs para buscar nomes de DIVs que normalmente têm conteúdos.
@ Gustavo Henrique
Não sei, Gustavo! Pelo seu comentário parece que havia algo anteriormente, mesmo, mas, sinceramente, também não sei! :-(
@ Sara
É seguindo o mesmo princípio que foi mostrado neste artigo: você analise o código-fonte para saber qual trecho quer "retirar" e utiliza as expressões regulares. Abraços!
estou com uma pequena duvida.
como pegar os outros links da pagina e algumas coisas que voce esta retirando o conteudo ?
eu tentei usar file_get_contents outra vez so que aparece o primeiro link netão so conseigo pegar o conteudo do primeiro link será que é possivel fazer isso o que eu estou dizendo ? obrigado
Cara, parabéns pelo ÓTIMO conteúdo disponível neste tutorial!
O primeiro teste que vou fazer para buscar conteúdo é aqui no seu site. Rsrs
Pode ficar tranquilo que seu nome estará lá.
Parabéns!!
@ yuso
Não entendi muito bem… Poderia explicar melhor?
@ Lucas Moreira de Souza
Opa! Que bom que gostou, Lucas! Tomara que seus testes deem certo! Entrei no seu site e gostei bastante! Design muito bom!
Abraços!
Cara, parabéns pelo ÓTIMO conteúdo disponível neste tutorial!
vlw mesmo..
Tentei fazer a mesma coisa que voce fez, mas usando javascript.. A ideia era colocar o tal site nu iframe e pegar as infos de la… Mas por umas questoes de seguranca, o js nao consegue pegar!
Dai tentei fazer em php, num script bastante semelhante ao seu.. Mas me deparei com um pequeno problema. No meu caso, a informacao que quero extrair eh de um site de jogo… que preciso logar para pegar a tal informacao. No js nao teria problema, pois ao logar 1x, quando abro novamente a pagina ele ja ta logado… mas usando php nao!
Pergunta:
Tem como eu passar meu login e senha via php para o site q eu quero extrair os dados?
Vlws
Abracos
E parabens pelo trabalho! pesquisei muito na net para tentar resolver esse problema! e de todas dicas/tutoriais/informacoes que achei, definitivamente, o seu site foi o MAIS completo! organizado e didatico! Parabens mesmo!
@ Danilo Oliveira
Obrigado pela força, Danilo! Que bom que você achou o artigo útil!
Para o seu problema realmente fica complicado, já que você tem que logar para pegar a informação. Você logar e depois pegar a informação funciona, mas imagina os visitantes que não teriam como fazer isso… De repente você encontra essas informações em outro site que não seja protegido por senha.
Abraços!
Caro Tarcio
Meus parabens pelo script… bem bolado e funcionou direitinho.
So tenho uma duvida que creio ser facil para o senhor me auxiliar
Capturei alguns dados que precisava de um site, onde usei:
$url = file_get_contents('http://www.xxx.com.br/Telas.asp?Num=' . $numero . '&acao=e');
Sendo que fiz um while para gerar varios $numero..
Deu certo pois a pagina a ser capturada tinha um FORM GET…
Mas agora me deparei com um site que usa um FORM POST
Como deverei usar o $url??
$url = file_get_contents('http://www.yyy.com.br/Telas.asp?');
Minha duvida é:Onde insiro o campo , pois nao da certo usar o $url com o numero direto no link.
Sera que me fiz entender?? Seria possivel me auxiliar??
Desde ja agradeço
Eusebio
@ Eusebio
Dê uma olhadinha na função "file_post_contents".
Eu nunca a experimentei, mas acho que foi isso que você perguntou, não é? :-)
E no caso pra pegar links ???
exemplo: pegar links da pagina B.
existe alguma funcao especifica ou tem que adaptar esta ai ?
pra ser mais especifico…
tem a pagina A e a B.
quando entrar na pagina A, ela vai ler os links que tem na B, e salvar nos dados da A.
e possivel ?
@ Deivid
Seria usando o que está explicado, mesmo, Deivid. Utilize preg_match_all() para pegar os links e faça o que for necessário depois.
Olá pessoal,
tenho um problema e acho que vcs podem me ajudar ….
Bom, gostaria de "imprimir ou passar" o conteúdo dentro de um DIV de uma página para outra página.
Exemplo:
Pagina1.html
Texto em html
Gostaria de fazer um botão de impressão onde abre uma outra página (Página2.html) com o conteudo da DIV "divNoticiaConteudo", onde irei colocar mais alguns dados de cabeçalho.
@ Aramis
Se precisar somente server-side, aqui está a base para fazer, mas você precisará aprofundar nas expressões regulares. Se não for estritamente necessário, então você vai conseguir isso usando o método load() do jQuery.
preciso fazer um esquema praticamente igual a esse porem tem algumas coisas a mais, pode me passar seu msn para nós conversar
Muuuuuuuuuito show cara… era o que eu precisava…
Valew mesmo! Muito dificil achar algo pela net com uma explicação boa assim, show… valew pela linha de código! =D
Abrs.
Olá! parabéns pelo site. Minha dúvida e necessidade é a seguinte: Eu tenho duas intranet trabalhando no mesmo servidor com bancos distintos. Será que eu conseguiria pegar todas matérias de uma categoria de uma intra para outra? tipo sem usar o WordPressMU, duas instalações do wordpress no mesmo servidor, sendo que as matérias de uma categoria iriam aparecer na outra intra. As duas intras possuem categorias em comum e isso seria para não ter que publicar duas vezes a mesma matéria uma em cada intra.
Agradeço desde já a atenção de todos
@ Jorge
Pergunta por aqui, mesmo, Jorge, vai que seu caso também vai ajudar outras pessoas!
@ Bruno Tacca
Muito obrigado! Espero que aproveite outros conteúdos do blog e volte sempre!
@ adriano sousa
Adriano, já que está tudo no mesmo servidor e é você quem emxe, não vejo motivos para usar file_get_contents() ou curl(). Simplesmente faça conexões ao banco que você quer e faça as queries. ;-)
Pessoal, desculpe minha falta de conhecimento… Sou intermediário em PHP, mas acho que o que eu preciso não é possível via PHP.
Tem uma homepage onde preciso preencher um campo e dar enter. Ela abrirá outra página com a resposta. Por exemplo, acesso a página onde coloco um IP e dou enter, abre-se uma nova página com a cidade da conexão desse IP.
Pergunta, por onde começo? Qual a linguagem de programação mais fácil para fazer isso? Preciso instalar algo específico no meu micro ou basta rodar o código no meu servidor?
Um abraço,
Marco
@ Marco
Comece estudando web services.
Nossa cara que legal esse post, faz um tempo que estava pensando como fazer isso e tal, resolvi procurar hoje, pesquisei e cai aqui!
Eu tentei fazer e até deu certo, mas eu sou fraco d+ em PHP, me enrrolo com 'barras' '?' e coisas assim rs…
Por favor me de uma ajuda, eu tentei pegar o endereço do site, dentro do 'href', tentei modificar o seu, ele funcionou +/-… coloquei tipo assim:
preg_match_all('/a href="http://(.+)">/s', $url, $conteudo);
Antes da primeira URL ele corta tudo, ai beleza, mas dps vem tudo sujo.
Só quero pegar o que esta dentro dos 'href' entende
Obrigado desde já
@ João
Dê mais uma analisada no artigo e complemente o estudo estudando expressões regulares que, com certeza, consegue! ;-)
Vlw cara, imaginei que a resposta seria assim, rs… mas não tem problema, manjo muito de ASP, só preciso aprender a traduzir a linguagem, 'barras', 'simbolos', etc
T+
Olá amigo,
eu trabalho com php a algum tempo, porem to precisando pega uma informação de um site, vi seu post e axei bem legal, porem não entendi essa expressão regular muito bem, dei uma procurada na net mais não axei muita coisa q ajude.
queria saber se vc tem alguma apostila ou um site q vc possa indicar ?
Parabens pelo post…..
agradeço desde já
@ Hideki
Existem muitas fontes para estudo de expressões regulares. Indico, para começar, Expressões Regulares – Guia de Consulta Rápida. Faça muitos testes e depois aprofunde o conhecimento. Bons estudos!
Tárcio muito bom o post.
Porem estou com algumas dificuldades, nenhuma das formas apresentadas funcionaram :S Sera que tenho que habilitar alguma função no php do meu servidor, e como eu faria isso , Obrigado!
Fernando Fernandes!
Muito bom
Olá Tárcio,
Estou fazendo exatamente o que você fez, pegar a cotação do site do Banco Central, conseguir fazer tudo certinho, más o que eu estou precisando mesmo é pegar apenas o valor de venda do dólar e do euro, tem como pegar só esses valores?
Grato
@ Fernando Fernandes
Realmente alguns servers desabilitam o file_get_contents(). Neste caso, é preciso usar o curl (dê uma olhadinha no tópico "E se o servidor não permite a função file_get_contents() ?").
@ fernando
Obrigado. Apareça!
@ Roberto
Não exatamente como está a estrutura do site do Banco Central, mas, basicamente, você deve "filtrar" corretamente a informação desejada. Uma dica é usar o Firebug para inspecionar o que você quer, aí você descobre em que ponto do DOM se encontra e fica mais fácil.
Estou capturando varios dados e de sites diferentes.
Desejo exibir todas as capturas na mesma pagina, porém da maneira que fiz levou um tempão para abrir a pagina com os resultados, pois ele busca os dados em cada pagina de cada site e so exibi depois de encontrados todos.
Como faz quando se quer capturar dados de mais de um site no mesmo script?
@ Paulo
Parece que você está fazendo certinho, mesmo. Essa demora é normal, já que o script tem que ler em várias fontes ao mesmo tempo.
cara show de bola parabéns!!! eu tava fazendo a maior regex do mundo para pegar um tabela no meio de codigo do site de rastreamento dos correios.. Sei que quanto mais simples melhor as regex mas nao sei pq as minhas sao sempre grandes rsrssrs.. é… nao tem jeito vou ter que tirar 1 semana e só estudar!!!. Parabéns pelo ótimo post.. consegui fazer o que queria com poucas linhas…
Com o tempo as expressões vão ficando melhores e mais curtas (quando é possível). Tirando essa semana de estudos, você vai ver que vai melhorar bastante!
Parabéns pela iniciativa!
Essa informação: "E se o servidor não permite a função file_get_contents()"
Salvou!….. Obrigado e ótimo post!
Pois é, Lucas, muitos servidores desabilitam a função por questões de segurança, mas o CURL salva o dia! :-)
Você não faz ideia de quanto esse post foi util! Muito Obrigado!
Não por isso, Paulo! Que bom que as informações foram úteis!
Brutal esta dica.
Como pegar apenas os valores do dolar desta página http://www.debit.com.br/resumogratuito.php?info=n… em um array?
wilson05/02/2011
Salvou mais um do inferno total
Tárcio, esse post era o que eu estava procurando. muito bom, valeu!
haha, que bom que foi útil pra você! Apareça!
Obrigado! Qualquer sugestão, basta dizer!
Tarcio,
como faço para pegar somente as imagens( . jpg ) do post (ex: compartilhar links do facebook que vem com imagens) estou querendo partir para um projeto mais nao quero começar sem essa função pois seria basicamente em cima dela que iria trabalhar.
att,
Bruno
Depende de como você faz o HTML de suas imagens (com barra, sem barra, etc), mas, basicamente, na expressão regular você só tem que envolver o que você quer pegar (a tag de imagem) com os "curingas".
Olá Tárcio, parabéns pelo post!
Tenho uma dúvida.
Como faço para puxar uma div e seu conteúdo de um site e inserir em outro?
Tipo, gostaria de puxar o módulo "VEJA SUA MARCA AQUI" do site: http://www.vocefamoso.com.br para ser usado em outros site, para quando o módulo for alterado, ser alterado também nos outros site.
Quero pegar apenas a parte VEJA SUA MARCA AQUI e inserir em outros sites, porém quando eu mudar essa parte, automaticamente em todos os sites em que eu adicionei o código, também será mudado.
Preciso muito disso, já pesquisei em tudo e não acho nada!
Brother, eu precisaria fazer algo semelhante, porém, tenho que enviar o internauta de um site institucional para uma loja virtual, de forma que ele acesse o site apenas completando a url em um formulário. tipo: o cara esta no http://www.meusite.com.br e quero que ele vá para o meusite.com.br/loja, porem, ele precisa ir para uma área onde esta o id de um distribuidor. Entao, ele nao precisaria digitar o dominio inteiro, apenas digitar o ID do distribuidor em um campo e clicar em "ir". Tem alguma ideia de como faço isso? Sou bem iniciante em PHP.
Parabens pelo artigo, vou testar hoje a noite
Não tem erro! ;-)
Eu amo internet, uma hora umproblema outra hora a solução. Obrigado vc quebrou um galhão.
Assim é a vida. ;-)
[]s
olá pessoal sou novo aqui estou com uma duvida como que fasso para colocar as array dentro de uma tabela aqui esta o código está funcionando
<?php
/**
* Nova instância de DOMDocument
*/
$DOMDocument = new DOMDocument( '1.0', 'utf-8' );
/**
* URL Do site que você deseja extrair o conteudo
*/
$WebSite = 'http://www.futsalparana.com.br/index.php?option=com_joomsport&view=ltable&sid=13&gr_id=0&Itemid=91';
/**
* Não preservar espaços em branco redundantes
*/
$DOMDocument->preserveWhiteSpace = false;
/**
* Carrega o conteudo do site
*/
@$DOMDocument->loadHTML( file_get_contents( $WebSite ) );
/**
* Nova instância do DOMXPath
*/
$DOMXPath = new DOMXPath( $DOMDocument );
/**
* Procura no Documento, um elemento 'table' que o id é igual a .. então avança pra seu filho 'tbody'
* depois avança para o filho de 'tbody', que é o 'tr' que o atributo 'class' contenha uma substring de 'etblraw'
* então avança para 'td', que recupera todos os valores de cada 'td' que não seje a primeira coluna na tabela
* porque é a sequencia deles, creio que não seje útil pra você
*/
foreach( $DOMXPath->query( './/table[@id="s_table_0"]/tbody/tr[@class=contains( @class, "etblraw" )]/td[ preceding-sibling::* ]' ) as $Nodes ){
/**
* Procura por todos os filhos de TD, que pode ser hrefs, ou textos .. etc
*/
foreach( $Nodes->childNodes as $Node ){
/**
* Monta um array com os valores encontrados, removendo os espaços em brancos adicionais
*/
$Data[] = utf8_decode( preg_replace( '/s/', null, $Node->nodeValue ) );
}
}
echo '<pre>';
/**
* Filtra todo o array, removendo índices vazios
*/
print_r( array_filter( $Data ) );
?>
preciso colocar dentro de uma tabela conforme o site http://www.futsalparana.com.br/index.php?option=c…
desde já agradeço
Você está usando uma técnica ligeiramente diferente da apresentada neste artigo. Provavelmente a abordaremos em breve, também.
Abraços!
Tenho quase o mesmo problema que o Danilo Oliveira…
o site me fornece uma página com um form e um campo único de pesquisa… eu gostaria de fazer uma pesquisa (pelo meu nome) e após a pesquisa pegar algumas das informações que aparecer sobre meu perfil…
Pude constatar que o form envia os dados para a propria página… e que após a mesma ter um $_Post ele atualiza a página com as informações do personagem…
Teria como eu injetar esse Post para conseguir pesquisar na página já com o $_Post['name'] == true ?
…Quanto ao seu tutorial, está ótimo!…
Pena que só testei com o meu caso rs
Tenho uma dúvida, o conteúdo fica dentro do head, isso atrapalha? e outra coisa onde eu coloco pra buscar?
É que eu não manjo muito php
A sua explicação foi fantástica. Só tenho a agradecer.
muito bom, gostei muito mas estou com um problema gostaria de uma ajuda caso alguem saiba o que fazer eu preciso pegar um conteudo de um site seque ele
<div id="informacao" >
<h2 class="topicos_anun">Informações</h2>
<span class="content_informacao">Distribuidor de Cereais ( Granolas, Ração Humana , Linhaça Entre Outros)
Venda e Distribuição de Produtos Naturais Embalados em Pacotes de 35, 200 e 800g Ou a Granel
</span>
</div>
so que de varias pagina com o mesmo padrao, montei uma expressao regular para pegar a tag <div id="informacao" > e outa para</div> testei elas isoladas deu certo coloquei entre as expressoes .* para pegar tudo que vem entre as expressoes mas parece que ele nao pega a quebra de linha tem alguma como prosseguie para pegar o que esta entre elas
obrigado e gostei muito do exemplo muito bom mesmo me ajudou muito
Dê uma revisada no tutorial que vai conseguir aplicar ao seu caso específico.
Abraços!
Brutal esta dica. ²
olá galera, tudo bom ?
e o seguinte, estou na missão de construir um site para uma escola
e neste site a diretora que que eu coloque um link de uma biblioteca virtual do uol
e ja percebir que estE SITE TEM A DIV central onde tem dodas as funcões da biblioteca
sem as propaganda qual o procedimento para reproduzir somente esta <DIV
Olá amigo. Tem um site que mostra os resultados do campeonato brasileiro em tempo real. O link é este http://www.baixebr.org/softwares/utilitarios/ipho…
Antes de tudo sou um pouco leigo no assunto, mas prometo que me esforçarei…
Como eu posso colocar esta script em meu blog?
Fazendo o que consta no tutorial! :-)
Estou trabalhando em um projeto que a resposta do formulário vai ser o endereço do site, ou seja não tem como colocar o endereço do site direto no código, tenho que usar uma variável(segue abaixo uma parte do código):
$n1=$_POST["n1"];
$url = file_get_contents(“$site”);
echo $url;
Porem pelo que parece não é permitido o uso de variável no lugar do endereço. Tem algum jeito de permitir o uso de variável? Se não tem, qual o outro método que posso usar para mostrar parte do conteúdo do site do qual o endereço foi digitado no formulário?
Dê uma olhada na página sobre o $_SERVER.
Tenho um site que precisa de login via POST e assim eu precisaria passar pelo login pra pegar os dados da tela seguinte. É possível isso?
Não entendi muito bem. De qualquer forma, o processo e técnicas para login é um assunto diferente do que estamos tratando. Dê uma lida melhor, no artigo, e você vai ver. :-)
Abraços!
Possuo um site de filmes e preciso pegar algumas informações do site. interfilmes.com
Como sinopse, titulos entre outras informações.
Estou utlizando o wamp e com o primeiro comando que você passou deu o erro “Warning: file_get_contents(http://www.uol.com.br/) [function.file-get-contents]: failed to open stream: Uma tentativa de conexão falhou porque o componente conectado não respondeu corretamente após um período de tempo ou a conexão estabelecida falhou porque o host conectado não respondeu. in C:\wamp\www\box\index.php on line 4″
o segundo comando da esse erro.
“Fatal error: Call to undefined function curl_init() in C:\wamp\www\box\index.php on line 4″
se poder me ajudar