Como o @reichaves comentou, no Brasil.IO tem um dataset que baixei do IBGE Nomes os dados, com classificação por gênero e desambiguação por grupos de nomes (ex: Tiago, Thiago, Thyago estão no mesmo grupo). Porém, não precisa fazer tantas requisições pra API: também é possível baixar em um arquivo só o dataset completo do Brasil.IO. Fiz uma função que baixa o arquivo (é um CSV compactado), descompacta e lê os registros - caso o arquivo já exista no seu HD, ele não baixa novamente (ou seja, vai ficar lento só na primeira vez que for rodar, nas demais, tendo o arquivo, ele só lê local). Você não precisa instalar nenhuma biblioteca extra (além do Python) para rodar esse código. Espero que seja útil:
import csv
import gzip
import io
import os
from urllib.request import urlopen
def get_names(filename):
if not os.path.exists(filename):
# File doesn't exist, so we download it from Brasil.IO
data = urlopen("https://data.brasil.io/dataset/genero-nomes/nomes.csv.gz").read()
with open(filename, mode="wb") as writer_fobj:
writer_fobj.write(data)
fobj = io.TextIOWrapper(gzip.open(filename, mode="rb"), encoding="utf-8")
return list(csv.DictReader(fobj))
names = get_names("/tmp/nomes.csv.gz")
for name_data in names:
if name_data["first_name"] == "ALVARO":
print(name_data)
Esse script demorou 4.978s na primeira vez que executei e 0.792s nas demais.
Eu também criei um post no Blog do Brasil.IO mostrando em mais detalhes como classificar nomes por gênero usando esse dataset, comparando a utilização da API com a utilização acima (baixar o dataset completo): Classificando nomes por gênero usando dados públicos.