/ / Este rastreador da Web está fazendo uma pesquisa de largura ou em profundidade? - java, rastreador da Web, primeira pesquisa de largura, primeira pesquisa de profundidade

Esse rastreador da web está fazendo uma pesquisa abrangente ou uma pesquisa em profundidade? - java, rastreador da Web, primeira pesquisa em profundidade, pesquisa em primeira profundidade

Alguém sabe se o rastreador da web descrito aqui usa uma pesquisa de profundidade primeiro ou largura primeiro? Meu instinto diz que é uma busca pela primeira vez, mas não tenho 100% de certeza disso.

Além disso, é comum que um rastreador da Web use essas formas de pesquisa (em particular, usando recursão)?

Respostas:

2 para resposta № 1

Esta é uma pesquisa profunda. Observe este código:

//get all links and recursively call the processPage method
Elements questions = doc.select("a[href]");
for(Element link: questions){
if(link.attr("href").contains("mit.edu"))
processPage(link.attr("abs:href"));
}

Este código irá explorar recursivamente todos os linksencontrado na página, explorando completamente o primeiro link e tudo o que é acessível, depois o segundo link e tudo o que é acessível etc. Por conseguinte, isso explora de maneira profunda.

Dito isto, isso vai ser realmente lento porque apenas um segmento está fazendo oexploração. Isso provavelmente seria muito mais eficiente se fosse reescrito como um BFS modificado que colocasse páginas inexploradas em uma lista de trabalho e tivesse um monte de threads que pegavam páginas inexploradas e as processavam.

Também não é uma boa ideia usar recursão quandoexplorando links da web. Você explodirá facilmente a pilha de chamadas se tentar fazer isso, pois qualquer site suficientemente grande terá links que se espalharão por todo o lugar. Eu descobri isso por experiência ao tentar fazer um DFS na Wikipedia. :-)

Espero que isto ajude!