Selenium爬虫循环生成字典追加列表仅保留末尾数据问题求解
代码问题修复方案
核心问题定位
- 内层遍历每行数据的循环中,
temp_data被重复覆盖,且追加列表的操作放在了内层循环外,每页仅保存最后一行数据 - 原有翻页逻辑容易出现页码匹配偏差,可能导致部分页数据遗漏
修正后代码
from selenium import webdriver from selenium.webdriver.common.keys import Keys import time import math # 定义核心变量 path_driver = "C:/Users/CS330584/Documents/Documentos de Defesa da Concorrência/Automatização de Processos/chromedriver.exe" website = "https://sat.sef.sc.gov.br/tax.NET/Sat.Dva.Web/ConsultaPublicaDevedores.aspx" value_search = 300 final_table = [] # 启动浏览器访问目标页 driver = webdriver.Chrome(path_driver) driver.get(website) search_max = driver.find_element_by_id("Body_Main_Main_ctl00_txtTotalDevedores") search_max.send_keys(value_search) btn_consult = driver.find_element_by_id("Body_Main_Main_ctl00_btnBuscar") btn_consult.click() driver.implicitly_wait(10) pages = math.ceil(value_search/50) # 遍历所有页码爬取数据 for i in range(1, pages+1): try: time.sleep(2) cnpjs = driver.find_elements_by_xpath("//*[@id='Body_Main_Main_grpDevedores_gridView']/tbody/tr/td[1]") empresas = driver.find_elements_by_xpath("//*[@id='Body_Main_Main_grpDevedores_gridView']/tbody/tr/td[2]") dividas = driver.find_elements_by_xpath("//*[@id='Body_Main_Main_grpDevedores_gridView']/tbody/tr/td[3]") # 每行数据生成后直接追加到列表 for z in range(len(empresas)): temp_data = { 'CNPJ' : cnpjs[z].text, 'Empresas' : empresas[z].text, 'Divida' : dividas[z].text } final_table.append(temp_data) # 不是最后一页就执行翻页 if i != pages: driver.execute_script(f"javascript:GridView_ScrollToTop('Body_Main_Main_grpDevedores_gridView');__doPostBack('ctl00$ctl00$ctl00$Body$Main$Main$grpDevedores$gridView','Page${i+1}')") except Exception as ex: print(ex) break
调整说明
- 把
final_table.append(temp_data)移到内层循环内,每生成一行数据就追加一次,避免数据被覆盖 - 页码循环起始值改为1,翻页逻辑调整为爬完当前页后跳转下一页,逻辑更清晰避免页码匹配错误
- 增加翻页判断,最后一页爬取完成后不需要再执行翻页操作,避免不必要的报错
内容的提问来源于stack exchange,提问作者Rafael Queiroz
相关产品推荐
相关产品推荐

