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

Python Selenium爬取分页表格写Excel覆盖仅存最后一页问题

问题根因

代码存在两个逻辑问题导致最终只保留最后一页数据:

  • 存储采集结果的Canada_Result列表定义在分页循环内部,每次翻页都会被重置为空列表,之前采集的数据直接丢失
  • 循环内每次采集完当前页数据就调用to_excel写入文件,pandas该方法默认使用覆盖写入模式,每次执行都会清空原有文件内容替换为当前页数据
修复代码

调整逻辑:将全量结果列表移到循环外初始化,所有分页数据采集完成后统一写入Excel,同时修复原代码硬编码每页25条数据、xpath选择器无效、固定循环20次可能提前/延后终止的问题,修复后完整代码如下:

from selenium import webdriver
import pandas as pd
import time

driver = webdriver.Chrome('C:\Webdriver\chromedriver.exe')
driver.get('https://www150.statcan.gc.ca/n1/pub/71-607-x/2021004/imp-eng.htm?r1=(1)&r2=0&r3=0&r4=12&r5=0&r7=0&r8=2022-01-01&r9=2022-01-01')
time.sleep(2)

# 全量采集结果列表在循环外初始化,全程仅创建一次
Canada_Result = []

for page in range(20):
    # 移除xpath中无效的["i"]筛选,直接获取当前页所有行的对应元素
    commodities = driver.find_elements_by_xpath('.//*[@id="report_table"]/tbody/tr/td[2]/a')
    countries = driver.find_elements_by_xpath('.//*[@id="report_table"]/tbody/tr/td[4]')
    quantities = driver.find_elements_by_xpath('.//*[@id="report_table"]/tbody/tr/td[7]')
    weights = driver.find_elements_by_xpath('.//*[@id="report_table"]/tbody/tr/td[8]/abbr')

    # 按当前页实际数据条数遍历,避免最后一页不足25条时触发索引报错
    for i in range(len(commodities)):
        row_data = {
            'Commodity': commodities[i].text,
            'Country': countries[i].text,
            'quantity': quantities[i].text,
            'weight': weights[i].text
        }
        Canada_Result.append(row_data)
    
    # 定位下一页按钮,若按钮已置灰(无更多分页)则提前终止循环
    next_btn = driver.find_element_by_xpath('//*[@id="report_results_next"]')
    if "disabled" in next_btn.get_attribute("class"):
        break
    next_btn.click()
    time.sleep(1)

# 所有分页数据采集完成后,一次性写入Excel,无覆盖问题
df = pd.DataFrame(Canada_Result)
df.to_excel('Canada_scrapping_result.xlsx', index=False)
driver.quit()
可选方案

如果需要边采集边写入(适用于数据量极大、内存不足的场景),可以使用追加写入模式,需要提前安装openpyxl库,写入时指定引擎和追加模式:

  • 第一次写入(文件不存在时)使用默认覆盖模式,写入表头和第一页数据
  • 后续分页写入时添加参数mode='a', engine='openpyxl', header=False, index=False,即可在已有文件末尾追加数据,不会覆盖原有内容

这种方式效率低于一次性写入,非大内存占用场景不推荐使用。


内容的提问来源于stack exchange,提问作者user16832397

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:57:23