You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多页面爬虫后Pandas无法生成Excel文件求助

问题分析与修复方案

核心错误点

  1. 文件导出格式不匹配:使用to_excel()方法生成Excel文件,但文件名后缀设为.csv,导致无法正确生成目标文件(Excel文件需用.xlsx后缀;若要CSV文件应改用to_csv())。
  2. 索引错误:内层循环遍历商品时,错误引用外层循环的页码索引i,而非当前商品的索引a,会导致数据重复或索引越界。
  3. 相对路径误用:在商品列表容器内查找子元素时,XPATH使用绝对路径//,会遍历整个页面而非当前容器,导致抓取元素数量异常。
  4. 冗余操作:每次循环都重新创建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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 23:15:01