Ir para conteúdo

POWERED BY:

Arquivado

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

Micilini Roll

Pesquisar no Google usando o CURL, salvando cada URL da busca no DB

Recommended Posts

Bem pessoal o titulos ja diz tudo: Vou exemplificar isso aqui pra voces:

 

 

Eu Estou pensando em um codigo que se pareça com um "mini-robo", aonde ele irá entrar no GOOGLE, digitar no campo de busca a palavra "a" e mandar buscar. logicamente irá ser mostrada muuuitos links de varias paginas, nisso o meu mini-robo ira pegar o link da url ...mas repare:

 

 

<h3 class="r"><a href="/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CC4QFjAA&url=http%3A%2F%2Fwww.vagalume.com.br%2Fevanescence%2Fimaginary-real-one.html&ei=RKZSUvPZBLLa4AOc1YHYBA&usg=AFQjCNEPt7N1ODhwUCd8PTrdPCG3TEfTVA&bvm=bv.53537100,d.dmg" onmousedown="return rwt(this,'','','','1','AFQjCNEPt7N1ODhwUCd8PTrdPCG3TEfTVA','','0CC4QFjAA','','',event)"><em>Imaginary</em> - Evanescence - VAGALUME</a></h3>

 

o Google coloca todos os links sempre na tag h3 cuja classe é R, e mesmo assim dentro do href do link ele nao retorna o link original..Entao o mini-robo irá:

 

  • Pegar o link existente dentro do href
  • Adicionar um www.google.com.br + link do href
  • Mandar buscar
  • Quando a url for alterada de www.google.com.br/url... para o nome do website verdadeiro o mini-robo pega essa url salva no DB, volta pro google e vai pra segunda pagina

 

E assim sucessivamente...

 

 

Bem eu nao tenho nenhuma ideia de como se fazer isso! acho que isso é possivel em CURL nao?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você conseguir fazer isso no Google, acho que ele deixa de ser o Google! :kiss:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, escrevi uma classe para fazer quase exatamente isso, mas ao invés de salvar num db, salva os links em arquivos...ele pega os links de acordo com algum critério fornecido.

 

Ela não está funcionando mais, o google deve ter alterado algo em seu código, como eu não preciso mais dela eu não me importei em não atualizar:

 

<?php
set_time_limit(0);
Class GoogleSearchCrawler
{
	private $source = '';
	private $links = array();
	private $pages;
	private $q;
	
	public function __construct(){
	}
	
	public function getLinks(){ $this->_getLinks();return $this->links;}
	
	public function DoIt($q){
		$this->q = $q;
		// Primeiro, pesquisar quantas páginas tem a pesquisa
		$this->_getPagination();
		$i = 1;
		do {
			$this->getSource((($i > 1) ? false : true), $i);
			$i++;
			$this->_getLinks();
		} while ( $i <= $this->pages );
		$this->writeLinks();
	}
	
	private function writeLinks()
	{
		if(count($this->links)>0){
			$str = implode("\n", $this->links);
			$filename = 'links/Links' . (int) $this->q . '' . mt_rand(0, 255) . mt_rand(0, 255) . '.txt';
			$h = fopen($filename, 'a+');
			fwrite($h, $str);
			fclose($h);
		}
	}
	
	public function getSource($first = true, $page=1){
		// Getting the search string
		$string = urlencode($this->q);
		// Generating google search link
		$link = 'http://www.google.com/search?q=';
		if($first){
			$link .= $string . '&hl=pt-BR&newwindow=1&prmd=imvns&filter=0&biw=1366&bih=667';
		} else {
			$link .= $string;
			$link .= '&hl=pt-BR&newwindow=1&prmd=imvns&ei=9NtQULzRD-r00gGpnYD4CQ&start=';
			$link .= (($page-1)*10);
			$link .= '&sa=N&filter=0&biw=1366&bih=667';
		}

		// Getting the source code
		$this->source = file_get_contents($link);
	}
		
	private function _getPagination(){
		$this->getSource(true);
		// Getting them !
		preg_match_all('/<\s*td[^>]*>(.*?)<\/td>/', $this->source, $matches, PREG_SET_ORDER);
		$this->pages =1;
		$pagination = array();
		if(count($matches)>0)
			foreach( $matches as $match )if( preg_match('/<a href=/i', substr($match[1],0,15)) ) $this->pages++;
	}

	public function _getLinks(){
		if( !function_exists("__") ){
			function __($_){
				if( !is_string($_) ) return false;
				if( empty($_) ) return false;
				$stop = strlen($_);
				$_ = str_replace(strtolower('<a href="/url?q='), '', strtolower($_));
				for($i=0;$i<$stop;$i++){
					if( in_array($_[$i], array('&', '"', '&', "'")) ){
						$stop = $i;
						$i = strlen($_);
					}
				}
				$url = '';
				for($j=0;$j<$stop;$j++) $url .= $_[$j];
				return rawurldecode($url);
			}
		}
		$regex = '/<\s*h3[^>]*>(.*?)<\/h3>/';
		preg_match_all($regex, $this->source, $matches, PREG_SET_ORDER);
		/*array_walk_recursive($matches, function(&$item, $key){
			$item = htmlspecialchars($item);
		});*/
		if(count($matches)>0)
			foreach($matches as $match)
				if(preg_match('/string/i', $match[1]))$this->links[] = __($match[1]);
	}
}

$i=1;
$crawler = new GoogleSearchCrawler();
while($i < 200){
	$crawler->DoIt('string ' . $i);
	$i++;
	//usleep('20000');
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi pessoal +1 pra voce man! mas nao irei seguir este classe nao... no momento estou desenvolvendo a minha propria rsrsr é pq estou fazendo um tutorial de como criar um buscador de internet Eficiente e Eficaz, D a seguinte maneira:

 

No inicio ele funciona como um parasita do Bing ou Google ou Cade, aonde o CURL irá fazer buscas dos seguintes caracteres A-Z/0-9. Funciona da seguinte forma:

 

 

  • Pesquisa no Google a letra "A"
  • Pega o primeiro link e entra na pagina
  • Pega a url da pagina e joga no DB
  • Busca links existentes dentro da pagina
  • Captura todas as palavras existentes dentro da pagina
  • Joga as palavras no DB separademente junto ao site que foi encontrado (caso essa mesma palavra for encontrada em outros sites, outras url irao ser associadas a esta palavra)
  • Depois de buscar todos os outros links existentes dentro daquela pagina, abre eles e volta pra etapa 3 e fica nesse loop ate nao encontrar mais links
  • Cada pagina que é aberta pelo Robo ele pega a pagina e salva ela no servidor com o file get content, junto as imagens...

 

E assim inifinitamente :D, Logicamente o robo possue algumas excessoes:

 

  • Inicialmente caso por ventura ele caia em uma pagina aonde ja tenha buscado, ele ignora e parte pra outra.
  • Palavras iguais como dito antes nao sao inseridas novamente no DB e sim realizadas um UPDATE no campo aonde encontra as referencias do url de cada palavra

Inicialmente o Buscador funcionará como um parasita de outros buscadores maiores, ate ele conseguir andar com suas proprias pernas..

 

Claro que nao quero fazer um buscador, isso é so um tutorial aonde explicarei aos interessados como se faz uma coisa dessas: Observe que eu nao sei se o google/cade/bing funciona dessa maneira maaas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Observe que eu nao sei se o google/cade/bing funciona dessa maneira maaas...

 

Isso que você está montando o cadê fazia a 15 anos atrás... hoje em dia existe muito mais coisa por trás do que apenas pesquisar as palavras dentro de uma página. De qualquer sorte, a título de aprendizado o que você está fazendo é bem satisfatório.

Compartilhar este post


Link para o post
Compartilhar em outros sites

15 anos atras? tem certeza? nao é uns 5 a 6 anos atras nao? 15 ANOOS!!! ¬¬

 

Bem fico feliz por obter um resultado satisfatorio, mas rapaz, vamos tentar melhorar esse sistemas ai rs, pois no final das contas sera postado no youtube, e quanto mais proximo chegar aos gigantes de busca melhor o tutorial irá ser recomendado entao, caso alguem quiser dar uma dicas coloque abaixo: e assim verei se da pra reproduzir rsrs

 

 

 

Bem, @ESerra voce que deve ter mais experiencia com programação do que eu! o que voce adicionaria ali no meu sistema para ele ficar bom assim como alguns buscadores mais atuais....(eu nao querro deixar igual so desejo uma noção, de uma forma que meu tutorial nao fique aquela coisa simples entende? Digamos assim Google = 100%, meu buscador = 70% ou 60%)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sem querer jogar água no seu chopp... se você/nós conseguirmos chegar a 5% do yahoo/bing já vai estar ótimo. Uma coisa muito explorada pelo google e que realmente fez ele saltar do nada para ser "o buscador" do mundo foram as redes neurais, desde sempre eles exploraram isto e isto hoje basicamente ajuda a interligar todos os serviços deles. Não é algo simples, aliás, é bem complexo de estudar, entender e aplicar.

Um outro detalhe importante, os buscadores modernos não apenas te entregam algo que tem as palavras que você informou, eles também entregam isto levando em conta a relevância do conteúdo para você. No caso do google, um simples clique em algum resultado da busca já vai influenciar buscar futuras.

Este assunto é bem interessante, mas também complexo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Interessante sua ideia, vou querer ver o resultado final rs

Claro que vc não vai chegar nem perto dos gigantes de busca, mas para estudo será ótimo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque tem que partir do google? Porque não a partir de um site como "o globo" ou "terra"?

A idéia não é que você vá buscar por conteúdo automaticamente?

 

Outra coisa, dá até pra fazer em php, só não dá para fazer via requisição em servidor. Teria que chamar o executável do php passando o script. O motivo é que vai dar timeout se chamar uma página que faz requisição em outras páginas indefinidamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem pessoal o titulos ja diz tudo: Vou exemplificar isso aqui pra voces:

 

 

Eu Estou pensando em um codigo que se pareça com um "mini-robo", aonde ele irá entrar no GOOGLE, digitar no campo de busca a palavra "a" e mandar buscar. logicamente irá ser mostrada muuuitos links de varias paginas, nisso o meu mini-robo ira pegar o link da url ...mas repare:

 

 

 

o Google coloca todos os links sempre na tag h3 cuja classe é R, e mesmo assim dentro do href do link ele nao retorna o link original..Entao o mini-robo irá:

 

 

  • Pegar o link existente dentro do href
  • Adicionar um www.google.com.br + link do href
  • Mandar buscar
  • Quando a url for alterada de www.google.com.br/url... para o nome do website verdadeiro o mini-robo pega essa url salva no DB, volta pro google e vai pra segunda pagina

E assim sucessivamente...

 

 

Bem eu nao tenho nenhuma ideia de como se fazer isso! acho que isso é possivel em CURL nao?

 

 

 

A URL está neste trecho:

 

/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CC4QFjAA&url=http%3A%2F%2Fwww.vagalume.com.br%2Fevanescence%2Fimaginary-real-one.html&ei=RKZSUvPZBLLa4AOc1YHYBA&usg=AFQjCNEPt7N1ODhwUCd8PTrdPCG3TEfTVA&bvm=bv.53537100,d.dmg

Outra coisa, dá até pra fazer em php, só não dá para fazer via requisição em servidor. Teria que chamar o executável do php passando o script. O motivo é que vai dar timeout se chamar uma página que faz requisição em outras páginas indefinidamente.

http://wiki.nginx.org/NginxHttpCoreModule#send_timeout

http://httpd.apache.org/docs/current/en/mod/core.html#timeout

http://php.net/max_execution_time

Compartilhar este post


Link para o post
Compartilhar em outros sites

dessa forma pode até conseguir resultados por um tempo, mas logo a casa cai..<br /><br /><br /><br /><br />

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma coisa que eu gostaria de saber:

 

 

Quando eu registrei meu website na net e comprei um servidor e hospdei meu website, sendo que nunca tinha colocado na net a existencia dele! (como links em email etc) o google conseguiu pegar, como? Tenho 2 possiveis Opniões:

 

  1. O google tem contato/acesso ao banco de dados de orgãos responsaveis por indexar todos os sites com registros .br, .com, .org
  2. Ou o google tem um algoritmo inteligente na qual quando pega a url de um site joga no whois, vê o servidor e de la ele busca todos os sites que existem nesse servidor

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente o seu domínio já existiu algum dia no passado. O google não "adivinha" os domínios, tenho um domínio de testes que nunca publiquei a URL e nenhum lugar, até hoje ele não foi indexado em nenhum buscador.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque tem que partir do google?

 

Google é um algoritmo muito bom, se nos basearmos por ele podemos tirar maior proveito de algumas funcionalidades, Imaginemos que isso seja um Objetivo

 

 

Porque não a partir de um site como "o globo" ou "terra"?

 

Pois estes pareçes ser mais simples que o Bing e o Yahoo, mas como voce tocou no assunto estes tambem nao serão descaratados, vejo isso como metas para se atinjir o objetivo

 

A idéia não é que você vá buscar por conteúdo automaticamente?

 

Apesar de nao colocar esse projeto em pratica pois ja uma grande porcentagem de chance da casa cair futuramente, nele sera extraido ideias de como fazer, entre outras coisas. esse buscador deve ser mais que buscar conteudo automaticamente, mais sim de uma forma inteligencia ou talvez com a ultilização de redes neurais com PHP

 

 

Outra coisa, dá até pra fazer em php, só não dá para fazer via requisição em servidor. Teria que chamar o executável do php passando o script. O motivo é que vai dar timeout se chamar uma página que faz requisição em outras páginas indefinidamente.

 

Isso que voce diz é verdade? Se for a unica opção vista no momento é tentar fazer com que o PHP trabalhe em conjunto com alguma outra linguagem como c++,java,python etc...

 

 

Bem é isso! alguem tem mais algumas ideias?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estudar um pouco de SEO e ver as diretrizes do google e bing pode oferecer bons insights sobre o funcionamento do seu sistema de busca, não vejo como construir um sistema desses para fins didáticos e deixar de fora questões de SEO.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso que voce diz é verdade? Se for a unica opção vista no momento é tentar fazer com que o PHP trabalhe em conjunto com alguma outra linguagem como c++,java,python etc...

Não é bem assim. PHP não serve só pra acessar via browser...

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.