Executando verificação de segurança...
2

Só um pequeno detalhe - porque eu sou chato e pedante :-)

Na lista de sites vc fez assim:

site_dict = {
    0: {
        "nome": "Eletrogate",
        "url": "https://www.eletrogate.com/",
        "pesquisar": True,
        "url_pesquisa": "https://www.eletrogate.com/buscar?q=#",
    },
    1: {
        "nome": "Robocore",
        "url": "https://www.robocore.net/",
        "pesquisar": True,
        "url_pesquisa": "https://www.robocore.net/busca/#",
    },
    ...

Ou seja, as chaves do dicionário são números sequenciais começando do zero.

E ao percorrê-los, vc faz:

for id, site_info in site_dict.items():
    ...

Mas dentro do for, o id não é usado para nada.


Isso são fortes indícios de que talvez seja melhor usar uma lista em vez de um dicionário. Ou seja, poderia ser assim:

# Em vez de dicionário, use uma lista de sites
sites = [
    {
        "nome": "Eletrogate",
        "url": "https://www.eletrogate.com/",
        "pesquisar": True,
        "url_pesquisa": "https://www.eletrogate.com/buscar?q=#",
    },
    {
        "nome": "Robocore",
        "url": "https://www.robocore.net/",
        "pesquisar": True,
        "url_pesquisa": "https://www.robocore.net/busca/#",
    },
    # etc...
]

E para percorrê-los:

for site_info in sites:
    if site_info["pesquisar"]:
        # etc...

No caso, também daria para filtrar a lista usando filter, e aí não precisaria do if:

for site_info in filter(lambda s: s['pesquisar'], sites):
    # não precisa mais do if site_info["pesquisar"]
    print("Abrindo site:", site_info["nome"])
    # etc...

Enfim, usando uma lista em vez de um dicionário, vc não precisa se preocupar com a numeração (que nem é usada para nada mesmo).

Mas caso precise do id, dá para obtê-lo com enumerate:

for site_id, site_info in enumerate(filter(lambda s: s['pesquisar'], sites)):
    print(f'id: {site_id} - Abrindo site: {site_info["nome"]}')
    # etc...

Mas se quiser continuar usando o dicionário, dá para fazer o loop apenas pelos valores (já que o id não está sendo usado para nada):

for site_info in site_dict.values():
    # etc...

Mas pelas características do código (índices numéricos sequenciais começando do zero, e que não são usados no loop), eu ainda acho melhor usar uma lista.

Isso facilita até para fazer a manutenção dos sites: sempre que um novo precisar ser adicionado, ou algum do meio for removido, etc, mudar a lista é bem mais simples, pois vc não precisa se preocupar com a numeração. Enfim, neste código específico, não vejo a necessidade de se usar um dicionário.


Por fim, outra dica de lib para webscraping é o Scrapy. E caso a página tenha JavaScript dinâmico, dá para usar juntamente com o Scrapy-Splash.

Carregando publicação patrocinada...
1

Boa, eu só trocaria o uso direto da chave por um s.get('pesquisar') ,que evita a quebra do código caso não exista a chave, por padrão o valor de retorno é None se não existir.
O mesmo para as chaves dentro do loop:

for site_id, site_info in enumerate(filter(lambda s: s.get('pesquisar'), sites)):
    print(f"id: {site_id} - Abrindo site: {site_info.get('nome']}")
    # etc...