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

Selenium分页爬取问题:爬取90页数据时首尾页数据缺失

问题原因
  • 首页漏采:代码启动后没有采集默认加载的第1页内容,直接执行了点击下一页的操作,进入第2页才开始正式采集,直接跳过了首页。
  • 尾页漏采:循环逻辑顺序错误,执行顺序为「采集当前页 → 点击跳转指定页码」,循环跑完第89页的采集后,点击跳转第90页就直接退出循环,没有执行第90页的采集步骤。
  • 参数调整无效:不管是把总页数加1还是把起始页码设为0,都没有修正上述两个核心逻辑错误。其中起始页码设为0触发超时是正常表现,站点分页从1开始编号,DOM中不存在文本为0的页码按钮,显式等待找不到元素自然报错。
  • 原代码用页码数字定位翻页按钮的逻辑兼容性很差:大部分站点分页栏不会同时展示所有页码,只会显示当前页前后几页的数字,页码靠后时很容易出现找不到元素的报错。
修复代码

直接调整执行顺序,改用兼容性更好的「下一页」按钮做翻页触发,逻辑更稳定:

import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

wait = WebDriverWait(driver, 20)
total_pages = 90
result = []

# 先采集首页(第1页)数据
time.sleep(2)
for ele in driver.find_elements(By.CSS_SELECTOR, 'div.srp-item-body'):
    driver.execute_script("arguments[0].scrollIntoView(true);", ele)
    result.append(ele.text)

# 从第2页开始循环翻页采集,直到爬完所有页
for _ in range(2, total_pages + 1):
    # 点击下一页跳转
    wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, '#ResultsPerPageBottom > nav > span.next'))).click()
    time.sleep(2)
    # 采集当前页商品
    for ele in driver.find_elements(By.CSS_SELECTOR, 'div.srp-item-body'):
        driver.execute_script("arguments[0].scrollIntoView(true);", ele)
        result.append(ele.text)

# 校验采集总量
print(f"采集完成,共获取{len(result)}条商品信息")
优化提示

如果站点异步加载速度波动大,可以把固定的time.sleep(2)替换为显式等待,判断div.srp-item-body元素加载完成后再执行采集,进一步降低漏数据概率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:21:30