Alguém poderia me ajudar? Como aplico um loop para ir para outra página?
Boa tarde, galera, estou tentando criar um webscrapping sobre leis e decretos. O código roda bem, mas somente a primeira página. Não consigo fazer com que ele vá para outra página e copie os mesmos elementos que eu coletei na página inicial. Alguém tem alguma ideia de como resolver?
import pandas as pd
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.firefox.options import Options
# Configurações do Selenium e do Firefox
service = Service('Caminho_para_o_executável_do_geckodriver') # Substitua pelo caminho correto do geckodriver
options = Options()
# options.add_argument('-headless') # Defina como False se quiser visualizar o navegador em ação
# URL para fazer o scraping
url_base = "https://www.cmf.sc.gov.br/proposicoes/pesquisa?definicao=legislacao&tipo=&number=&ano=&data\_ini=&data\_fim=&palavras\_chave=tecnologia&autoria=&vigencia=&criterios\_titulo=Atividades+Legislativas&criterios=#pesquisa"
# Função para aguardar o carregamento dos elementos
def wait_for_elements(xpath):
return WebDriverWait(driver, 10).until(EC.presence_of_all_elements_located((By.XPATH, xpath)))
# Inicializando o navegador
driver = webdriver.Firefox(service=service, options=options)
# Listas para armazenar os dados
data_list = []
nome_lei_list = []
descricao_lei_list = []
link_lei_list = []
# Loop para percorrer todas as páginas
j = 3
while True:
url = "https://www.cmf.sc.gov.br/proposicoes/pesquisa?definicao=legislacao&tipo=&number=&ano=&data\_ini=&data\_fim=&palavras\_chave=tecnologia&autoria=&vigencia=&criterios\_titulo=Atividades+Legislativas&criterios=#pesquisa"
driver.get(url)
i = 2
while True:
xpath_data = f"/html/body/div[4]/div/div[1]/div[{i}]/div[1]/span"
xpath_nome_lei = f"/html/body/div[4]/div/div[1]/div[{i}]/div[2]/a"
xpath_descricao_lei = f"/html/body/div[4]/div/div[1]/div[{i+1}]/a[1]/em"
xpath_link_lei = f"/html/body/div[4]/div/div[1]/div[{i}]/div[2]/a"
elementos_data = driver.find_elements(By.XPATH, xpath_data)
elementos_nome_lei = driver.find_elements(By.XPATH, xpath_nome_lei)
elementos_descricao_lei = driver.find_elements(By.XPATH, xpath_descricao_lei)
elementos_link_lei = driver.find_elements(By.XPATH, xpath_link_lei)
if not elementos_data:
break
# Adicionar os dados às listas
data_list.append(elementos_data[0].text if elementos_data else None)
nome_lei_list.append(elementos_nome_lei[0].text if elementos_nome_lei else None)
descricao_lei_list.append(elementos_descricao_lei[0].text if elementos_descricao_lei else None)
link_lei_list.append(elementos_link_lei[0].get_attribute('href') if elementos_link_lei else None)
i += 2
# Verificar se há um link para a próxima página
next_page_link = driver.find_elements(By.LINK_TEXT, "Próximo")
if not next_page_link:
break
else:
page += 1
# Criando um dicionário com as listas de dados
dados_dict = {
'Data': data_list,
'Nome da Lei': nome_lei_list,
'Descrição da Lei': descricao_lei_list,
'Link da Lei': link_lei_list
}
# Criando o DataFrame
df_leis = pd.DataFrame(dados_dict)
# Exibindo o DataFrame
print(df_leis)
# Fechando o navegador
driver. Quit()