Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Opa!
estou usando o seguinte codigo para capturar um conteudo de um site, porém eu gostaria de tratar o conteudo e só exibir uma tabela
$result=file_get_contents("[http://www.site.com.br"](http://www.site.com.br));
if ($result === false){
echo "erro";
} else {
echo $result;
}
imagine que no retorne venha um código da seguinte forma
>
<h1>Teste</h1>
<p>lorem ipsun...lorem ipsun...lorem ipsun...</p>
<script></script>
<table>
<tr>
<td>texto</td>
</tr>
</table>
Como posso fazer para capturar somente o TABLE?
Para mim jQuery é o menos recomendo nesse caso. Porque não simplismente utilizar DOM ou então xPath?
Sim, mas o jQuery também pode ser integrado ao PHP DOM, dê uma olhada nisso: http://simplehtmldom.sourceforge.net/
Find tags on an HTML page with selectors just like jQuery.
Bibliotecas externas pra fazer o que o PHP já faz nativo.
Galera, quero fazer isso com PHP não faz sentido fazer com jQuery
Evandro Oliveira que biblioteca eu poderia usar em PHP para fazer isso?
Acho que você pode fazer assim:
HTML
<h1>Teste</h1>
<p>lorem ipsun...lorem ipsun...lorem ipsun...</p>
<script></script>
<table>
<tr>
<td>texto</td>
</tr>
</table>
PHP:
$result=file_get_contents("[http://www.site.com.br"](http://www.site.com.br));
if ($result === false){
echo "erro";
} else {
$index_table = strpos( $result, "<table>" );
$index_fim_table = strpos( $conteudo, "</table>" );
$tabela = substr( $conteudo, $index_table, $index_fim_table - $index_table );
echo $tabela;
}
O substr serve para pegar um conteudo de uma string (primeiro parâmetro) , iniciando de uma determinada posição (segundo parâmetro), e pegar um determinado número de caracteres partindo da posição inicial ( terceiro parâmetro )
O problema é que esse código só funciona bem se você quiser pegar o conteúdo da primeira tabela do seu código. Se houver uma segunda e você quiser pegar o conteúdo dessa, então já não funciona.
Sim, mas o jQuery também pode ser integrado ao PHP DOM, dê uma olhada nisso: http://simplehtmldom.sourceforge.net/
Essa é uma biblioteca comum baseada na maneira como jQuery funciona, não tem nada de "integrado".
E é igual o Evandro disse, utilizar bibliotecas externas sendo que existem nativas do PHP que fazem muitissimo bem.
>
Acho que você pode fazer assim:
HTML
<h1>Teste</h1>
<p>lorem ipsun...lorem ipsun...lorem ipsun...</p>
<script></script>
<table>
<tr>
<td>texto</td>
</tr>
</table>
PHP:
$result=file_get_contents("[http://www.site.com.br"](http://www.site.com.br));
if ($result === false){
echo "erro";
} else {
$index_table = strpos( $result, "<table>" );
$index_fim_table = strpos( $conteudo, "</table>" );
$tabela = substr( $conteudo, $index_table, $index_fim_table - $index_table );
echo $tabela;
}
O substr serve para pegar um conteudo de uma string (primeiro parâmetro) , iniciando de uma determinada posição (segundo parâmetro), e pegar um determinado número de caracteres partindo da posição inicial ( terceiro parâmetro )
O problema é que esse código só funciona bem se você quiser pegar o conteúdo da primeira tabela do seu código. Se houver uma segunda e você quiser pegar o conteúdo dessa, então já não funciona.
Assim resolve meu problema!
Obrigado
Só tenha em mente que se o site.com.br adicionar uma tabela antes, se o site.com.br adicionar alguma classe a tabela, se o site.com.br fazer qualquer modificação na tag da tabela, o seu código não funciona mais.
Se você ainda estiver disposto a fazer de uma maneira digamos "melhor", é só falar.
>
Só tenha em mente que se o site.com.br adicionar uma tabela antes, se o site.com.br adicionar alguma classe a tabela, se o site.com.br fazer qualquer modificação na tag da tabela, o seu código não funciona mais.
Se você ainda estiver disposto a fazer de uma maneira digamos "melhor", é só falar.
Isso eu sei...
qual seria sua outra solução para ficar "melhor"
Eu queria algo similar, porém pegar o valor em reis desse site aqui
http://www.mercadobitcoin.com.br/ja na entrada ele mostra, nota que ele troca o valor entre duas opções, bitcoin e litecoin, mas acredito que ao entrar bitcoin sera contabilidado primeiro...
Alguma ideia?
ja fiz varios tutos com file_get_contents e tal, mas nada.
expressão regular:
Hmm, você deverá filtrar isso. Recomendo a utilização do jQuery, que tem a função .contents() que filtra os dados de um determinado grupo de elemento(s), retornando seu conteúdo, além das funções (muito utilizadas) .find() e .html(). Veja a documentação: http://api.jquery.com/contents/