多页面爬虫后Pandas无法生成Excel文件求助
问题分析与修复方案
核心错误点
- 文件导出格式不匹配:使用
to_excel()方法生成Excel文件,但文件名后缀设为.csv,导致无法正确生成目标文件(Excel文件需用.xlsx后缀;若要CSV文件应改用to_csv())。 - 索引错误:内层循环遍历商品时,错误引用外层循环的页码索引
i,而非当前商品的索引a,会导致数据重复或索引越界。 - 相对路径误用:在商品列表容器内查找子元素时,XPATH使用绝对路径
//,会遍历整个页面而非当前容器,导致抓取元素数量异常。 - 冗余操作:每次循环都重新创建DataFrame,可优化为数据收集完成后统一生成。
修正后的代码
from selenium import webdriver from selenium.webdriver.common.by import By from time import sleep import pandas as pd # 修正导入别名,符合常规用法 username = "x" password = "x" login_url = 'https://xx/nl_NL/login' target_url = 'https://shop.libra.energy/nl_NL/category/solar/zonnepanelen' driver = webdriver.Chrome() driver.get(login_url) driver.implicitly_wait(5) # 延长隐式等待时间,提升稳定性 # 登录操作 email = driver.find_element(By.NAME, "email") pswrd = driver.find_element(By.NAME,"password") email.send_keys(username) pswrd.send_keys(password) sleep(2) login_btn = driver.find_element(By.XPATH, '//nvs-button[text()="Inloggen"]') login_btn.click() sleep(3) # 进入目标页面并处理Cookie driver.get(target_url) sleep(1) cookie_btn = driver.find_element(By.ID, "CybotCookiebotDialogBodyLevelButtonLevelOptinAllowallSelection") cookie_btn.click() sleep(1) result = [] for page in range(4): # 外层循环变量名更清晰 # 获取商品列表容器 product_list = driver.find_element(By.CLASS_NAME, "t-list-view") # 使用相对路径(.//)在容器内查找子元素 artikelnummer_list = product_list.find_elements(By.XPATH, './/small[@class="flex flex-wrap gap-x-1"]') prijzen_list = product_list.find_elements(By.XPATH, './/div[@class="m-product-price m-product-price--expanded"]') voorraad_list = product_list.find_elements(By.XPATH, './/div[@class="m-product-availability m-product-availability--size-small m-product-availability--status-success leading-4"]') sleep(2) # 遍历当前页的所有商品,使用当前循环索引a for a in range(len(artikelnummer_list)): # 处理元素数量不匹配的情况(避免索引越界) if a < len(prijzen_list) and a < len(voorraad_list): temp = { 'Artikelnummer': artikelnummer_list[a].text.strip(), 'Prijzen': prijzen_list[a].text.strip(), 'Voorraad': voorraad_list[a].text.strip() } result.append(temp) # 跳转到下一页(最后一页跳过) if page < 3: next_page = driver.find_element(By.XPATH, '//span[text()="Volgende pagina"]') driver.execute_script("arguments[0].click();", next_page) sleep(3) # 所有数据收集完成后生成DataFrame并导出为Excel if result: df_data = pd.DataFrame(result) # 使用正确的Excel后缀.xlsx,确保安装openpyxl库 df_data.to_excel('Voorraadprojectie.xlsx', index=False, engine='openpyxl') else: print("未抓取到任何数据") driver.quit()
额外注意事项
- 确保已安装
openpyxl库(pip install openpyxl),这是pandas导出Excel文件的必需依赖。 - 替换代码中的登录URL、用户名和密码为真实信息。
- 可根据页面加载速度调整
sleep时间或改用显式等待(WebDriverWait)替代固定休眠,提升爬虫稳定性。
内容的提问来源于stack exchange,提问作者Lautjelief
相关产品推荐
相关产品推荐

