Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

charlesschaefer

Procurar links dentro de uma página html

Recommended Posts

Bom galera, é o seguinte, tenho um sistema de montagem automática de mapa de sites.

A pessoa fornece o endereço do site, e o sistema busca na página pelas tags <a href=""></a> para montar o mapa.

 

A dúvida é o seguinte, eu me embolei aqui em casa, mas sei que dá pra achar o conteúdo de href, e o valor que está entre <a> e </a> de três formas diferentes:

1) Uma é com as funções de tratamento de strings do php, e ums laços daqui, outros dali...

2) Utilizando a biblioteca DOM (antiga domxml) para buscar o valor do atributo href da tag <a> e também o conteúdo dessa tag...

3) Expressões regulares.

 

Então, eu tenho três opções, e eu posso montar o sistema com as três e depois fazer o teste de qual é mais rápida.....só que se bem me entendem, fazer a mesma coisa três vezes só pra testar a vel num o mais legal pro fim-de-semana....

 

O que eu quero saber é o seguinte:

Alguém tem uma idéia de qual é melhor para eu usar??

 

sei que cada uma tem suas especificidades:

 

Usar funções internas é mais rápido, normalmente, do que usar ER, e usar o DOMXML é um meio termo para as outras opções, mas como, pra utilizar as funções internas, eu terei que fazer uns 4 ou 5 loops num array, e com ER eu posso evitar isso, eu estou perdidinho...

 

Se alguém tiver uma dica de qual utilizar, ou de uma outra forma pra fazer isso, estou de coração aberto para recebê-la.... :D

 

Bom fim-de-semana pra vocês...

 

[editado]

Na pressa agente até esquece do mais importante:

Muito obrigado, desde já, aos que puderem me ajudar e aos que não puderem mas lerem o tópico na intenção de fazê-lo...

até mais

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hmmm, posso estar falando besteira, mas, utilizando ER e Loop's você pode selecionar uma "string" com o valor <a href></a>, conseguiu entender?Tipo, imagine que o site tem tutoriais de HTML, que explicam o uso da tag <a href>, em vez de pegar as tags de verdade, você pode pegar essas strings por engano...A não ser que você já tenha previsto estas situações né....

Compartilhar este post


Link para o post
Compartilhar em outros sites

saquei o que você está querendo dizer.Não tinha pensado nessa hipótese.Nesse caso, vou ter que eliminar tudo o que estiver dentro de tags <pre></pre> na string que é retornada na busca pela página. Acho que é só assim que dá pra escrever tags sem fazer o browser entender não é? tem o htmlentities, mas ai com ER ou funções nativas eu num vou pegar essas strings.Bom, de qualquer forma, muito obrigado pela dica, eu ia acabar deixando isso passar em branco.valew.

Compartilhar este post


Link para o post
Compartilhar em outros sites

De nada!Mas eu acho que ficaria entre a ER e o DOM, apesar de nunca ter utilizado ela no PHP...Boa sorte e não esqueça de mostrar o sistema para nós!!Falou...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, ainda não testei a velocidade do script com outras opções, mas pelo que eu testei aqui a velocidade desse está até rapidinha, leva uns 0,5 segundos no máximo pra fazer a verificação de url e labels de links da página inicial do imasters.

Quem quiser o script, ai vai:

<?php //teste de busca por tags html/** parte do script que eu uso pra testar a velocidade*/$start = getmicrotime();/** o endereço que o usuário passar pela url */$html = file_get_contents($_GET['url']);/**função que está no manual do php onde fala sobre a função microtime()referências em http://br.php.net/manual/pt_BR/function.microtime.php**/function getmicrotime(){   list($usec, $sec) = explode(" ", microtime());   return ($usec + $sec);}/**função que irá pegar todas as tags <a></a> do site**/function get_anchor($html){	$er = "/<a.*?href=(\".*?\"|[A-Za-z0-9_]*?).*?>.*?<\/a>/";	preg_match_all($er,$html,$links);	$link = $links[0];	return $link;}/** imprime os links um em cima do outro na página do usuário*/$links = get_anchor($html);foreach ($links as $value) {	echo "<br />".$value."<br />";}/**função que pega o valor de "href" do link.Devo a ER que eu fiz aqui ao livro do excelentíssimo sr Aurélio Maurílio Vargas, que publicou o seu livro "Expressões Regulares: Guia de consulta rápida" de graça na net:http://guia-er.sourceforge.net/guia-er.htmlEspero que eu consiga melhorá-la em breve...**/function get_url($url,$ss=1){	$url = strstr($url,"href=");	$url = preg_match("/href=\"/",$url) ? preg_replace("/\".*/","",str_replace("href=\"","",$url)) : preg_replace("/\s.*/","",str_replace("href=","",$url));	//$url = 	return $url;}/** função que pega o label dos links**/function get_label($url){	$label = str_replace("</a>","",preg_replace("/^<a.*?>/","",$url));	return $label;}/**Imprime na tela os links, com nome e url, mas sem outros atributos da tag <a></a>*/echo "<br />------------------------------------------------------- Começa o loop com nomes e url --------------------------------<br />";foreach($links as $link){	echo "<<a href=\"".$_GET['url'].get_url($link)."\">".get_label($link)."</a>><br />";}/**fim da contagem de tempo que gasta o script.Do jeito que está, conta a execução do script inteiro, mas para saber apenas o tempo que gasta para pegar url, label, e tag inteira, basta colocar a variável $start (que está declarada no começo do script) após a variável $html, que pega o site que for passa, e o que realmente demora no script.*/print (getmicrotime()." => começou: ".$start." soma = ".(getmicrotime() - $start));

Bom, é isso ai, se alguém tiver alguma melhoria a fazer no script, estou de coração aberto :D...

até mais

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.