Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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á:
E assim sucessivamente...
Bem eu nao tenho nenhuma ideia de como se fazer isso! acho que isso é possivel em CURL nao?
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');
}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:
E assim inifinitamente :D, Logicamente o robo possue algumas excessoes:
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...
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.
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%)
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.
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!
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.
>
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á:
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
dessa forma pode até conseguir resultados por um tempo, mas logo a casa cai..<br /><br /><br /><br /><br />
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:
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.
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?
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.
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...
Entendi.. obg pessoal
Quando você conseguir fazer isso no Google, acho que ele deixa de ser o Google! :kiss: