Ir para conteúdo

POWERED BY:

Arquivado

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

Renan T. Fernandes

[Resolvido] Procurar todos os links em uma pagina

Recommended Posts

Olá mais uma vez, no meu ultimo topico o Beraldo resolveu a minha duvida, e esta aqui eu a continuacao do meu problema -.-

 

<?
$var = file("http://imasters.com.br/index.php");

$var2 = str_replace("\n","",$var);
$var2 = str_replace('="http://','=\"http://', $var2);
$var2 = str_replace('">','\">',$var);

for($i = 0;$i < sizeof($var2);$i++) {
preg_match("/<a(.*?)href=\"(.*?)\"/i", $var2[$i], $matches[$i]);

echo $matches[$i][2]."</br>";
}
?>
quando se importa uma pagina apenas com o links

ex. <a href="imasters.com.br">CLique Aqui</a>

ele funciona perfeitamente, porem quando se importa uma pagina enche de erros,

ta dificil pra mim isso -.- //qm manda ser noooooob xDD

Compartilhar este post


Link para o post
Compartilhar em outros sites

aew o code... usei funções bem basicas pra ficar melhor de você aprender...

<?php
function getLinks($URL) {
	$urlInfo = parse_url($URL);
	$conteudo = explode("<a ",strip_tags(file_get_contents($URL),"<a>"));
	$protocolos = array("http","https","ftp");
	$aTexto = $aUrl = array();
	foreach ($conteudo as $link) {
		preg_match("/href=\"(.*?)\".*?>(.*?)<\/a/i", $link, $saida);
		list($c,$url,$texto) = $saida;
		if (empty($url) or empty($texto)) continue; //Elimina URLs inválidas
		$protocolo = substr($url,0,strpos($url,":"));
		if ($protocolo == "javascript") continue;
		if (!in_array($protocolo,$protocolos)) {
			switch(substr($url,0,1)) {
				case "#":
				case "?":
					$url = "$URL$url";
					break;
				case "/":
					$url = $urlInfo["scheme"]."://".$urlInfo["host"].$url;
					break;
				default:
					$url = $urlInfo["scheme"]."://".$urlInfo["host"].substr($urlInfo["path"],0,strrpos($urlInfo["path"],"/"))."/".$url;
			}
		}
		$aUrl[] = $url;
		$aTexto[] = $texto;
	}
	return array($aUrl,$aTexto);
}
?>

PS: se acharem erros me comuniquem por MP para q eu posso consertar

Compartilhar este post


Link para o post
Compartilhar em outros sites

ai kra, vlw pelo script, se nao for muito pode me fazer 2 coisas?

primeiro, por que a linha 11 da tanto erro?

<?php
$link2 = $_GET['page'];
getLinks($link2);
function getLinks($URL) {
	$urlInfo = parse_url($URL);
	$conteudo = explode("<a ",strip_tags(file_get_contents($URL),"<a>"));
	$protocolos = array("http","https","ftp");
	$aTexto = $aUrl = array();
	foreach ($conteudo as $link) {
		preg_match("/href=\"(.*?)\"*?>(.*?)<\/a/i", $link, $saida);
		list($c,$url,$texto) = $saida;
		if (empty($url) or empty($texto)) continue; //Elimina URLs inválidas
		$protocolo = substr($url,0,strpos($url,":"));
		if ($protocolo == "javascript") continue;
		if (!in_array($protocolo,$protocolos)) {
			switch(substr($url,0,1)) {
				case "#":
				case "?":
					$url = "$URL$url";
					break;
				case "/":
					$url = $urlInfo["scheme"]."://".$urlInfo["host"].$url;
					break;
				default:
					$url = $urlInfo["scheme"]."://".$urlInfo["host"].substr($urlInfo["path"],0,strrpos($urlInfo["path"],"/"))."/".$url;
			}
		}
		$aUrl[] = $url;
		$aTexto[] = $texto;
	}
	for($i = 0;$i < sizeof($aUrl);$i++) {
	echo $aUrl[$i] . "</br>";
	}
	return array($aUrl,$aTexto);
}
?>

podia comentar um pouco + as linhas, foi usada muitas funcoes que eu desconheco, qria saber em q eles estao servindo ai,

ah, por exemplo nesse site,

www.procurandocarro.com

eles apenas mostra um link, a maioria dos links em q nao se recebe a url do site, ex. http://site.com/

nao sao listadas no script, se so tiver como arquivo/algo.php

nao encontra

=/

Compartilhar este post


Link para o post
Compartilhar em outros sites

tah, dei uma "corrigida" no script, comigo especificando um padrao das urls q eu qro ate q funfo, mas ainda tem algumas q nao funcionaom -.-

<?php
$link2 = $_GET['page'];
$d2 = $_GET['default'];
$name2 = $_GET['nome'];

getLinks($link2,$d2,$name2);
function getLinks($URL, $d , $n) {
	$urlInfo = parse_url($URL);
	$conteudo = explode("<a ",strip_tags(file_get_contents($URL),"<a>"));
	$protocolos = array("http","https","ftp");
	$aTexto = $aUrl = array();
	foreach ($conteudo as $link) {
		preg_match("/href=\"(.*?)\".*?>(.*?)<\/a/i", $link, $saida);
		$saida = str_replace('href="',"",$saida);
		$saida = str_replace('">',"",$saida);
		$saida = str_replace('</a',"",$saida);
		$saida = str_replace(' ',"</br>",$saida);
		list($c,$url,$texto) = $saida;
		if (empty($url) or empty($texto)) continue; //Elimina URLs inválidas
		$protocolo = substr($url,0,strpos($url,":"));
		if ($protocolo == "javascript") continue;
		if (!in_array($protocolo,$protocolos)) {
			switch(substr($url,0,1)) {
				case "#":
				case "?":
					$url = "$URL$url";
					break;
				case "/":
					$url = $urlInfo["scheme"]."://".$urlInfo["host"].$url;
					break;
				default:
					$url = $urlInfo["scheme"]."://".$urlInfo["host"].substr($urlInfo["path"],0,strrpos($urlInfo["path"],"/"))."/".$url;
			}
		}
		$aUrl[] = $url;
		$aTexto[] = $texto;
	}
	$final = "";
	for($i = 0;$i < sizeof($aUrl);$i++) {
	if(preg_match("/$d/", $aUrl[$i])) {
	$final =  $aUrl[$i] . "\n" . $final;
	
	}
	}
		$fp2 = fopen("k/arqs/". $n . "_arquivo.txt", "w+");
		fwrite($fp2, "");
	
	
	$arq2 = file("k/arqs/". $n . "_arquivo.txt");
	$fp = fopen("k/arqs/". $n . "_arquivo.txt", "w+");
fwrite($fp, $final); 
fclose($fp);

}
?>
<script>
window.open('index2.php?c=s');
</script>

Compartilhar este post


Link para o post
Compartilhar em outros sites

A intenção é buscar todos os links? Se sim:

 

$txt = "
texto texto
<a href=\"http://www.imasters.com.br\">iMasters</a>
texto texto
texto
<a href=\"http://www.phpbrasil.com\">PHPBrasil</a>
texto
<a href=\"http://www.php.net\">Manual do PHP</a>
";

preg_match_all("/<a(.*?)href=\"(.*?)\">/i", $txt, $matches);

echo "<pre>";
print_r($matches[2]);
echo "</pre>";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Warning: preg_match_all() expects parameter 2 to be string, array given in D:\Arquivos de Programas\EasyPHP 2.0b1\www\index.php on line 57
ta linha 57 mas eh q eu dexei o antigo como comentado, eu so usei

$txt - file($URL)

ond $URL eh a query pega pelo ?page=

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.