Show de bola! Acho que precisamos de mais search engines independentes e nos livrar do oligopólio.

Sobre opções para fazer um crawler, sinto que preciso dizer que qualquer linguagem serve! Sério, qualquer linguagem que permita que você faça uma request http e que você consiga fazer o parsing do conteúdo, serve. Mas o ponto principal é que nem todas são ideais, todas servem, mas não necessariamente devem ser utilizadas.

Uma search engine precisa, em média, mais de 2TB de dados (uma pesquisa que fiz a um bom tempo atrás, não consigo afirmar com certeza) para conseguir servir buscas decentemente. E isso é só o começo, você vai precisar muito mais do que isso e manter todo esse índice atualizado. Logo, ou você tem um processo muito otimizado e rápido, ou você vai gastar dinheiro em compute e tempo.

Então, voltando as ferramentas, recomendo escolher uma linguagem baseada nessas nescessidades, até por que nenhuma tem uma biblioteca "Google" já pronta pra você. Minha opinião: descarte Selenium imediatamente, gasta muito recursos e não vale a pena, escolha Rust/Go ou qualquer linguagem minimamente rápida (infelizmente python não é) para o desenvolvimento.

Isso é só minha visão, então estude e veja o posicionamento dos outros para ver possíveis caminhos. Espero que tenha ajudado.

PS: para evitar ser barrado como bot sei que a Cloudflare tem uma página sobre como se inserir no programa de search engines e ter um "passo livre" fazendo web crawls.

Depende muito dos dados que você está indexando, da forma com que você está indexando, e da própria search engine.

Por exemplo: tenho num elasticsearch (não é um cluster, apenas um nó master) um indice de cidades em todo o mundo, com 3MM+ de cidades.

O nome da cidade é indexado com diversas variações, usando a estratégia n-gram para fazer o autocomplete e outra estratégias.

então uma cidade chamada crato é indexada internamente com as seguintes variacoes:

cra
crat
crato
c(a-z)a
cr(a-z)
...

ou seja, para tornar mais rapida a busca, você indexa diversos termos que apontam para um só documento (cidade).

Isso deixa o storage relativamente grande em relação a base de dados original.

Nesse caso, a minha tabela de cidades no banco de dados tem ~1.5GB, enquanto o elasticsearch ocupa ~8GB.

Acho 2TB um número muito alto, que só é atingido com uma quantidade muito grande de dados.

Show, valeu demais pelas dicas, vou dar uma estudada e tentar entender melhor sobre as linguagens que você me mandou, sobre o cloudflare muito obrigado também hehehe..