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:
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/#",
},
]
E para percorrê-los:
for site_info in sites:
if site_info["pesquisar"]:
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):
print("Abrindo site:", site_info["nome"])
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"]}')
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():
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.