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
相关产品推荐
相关产品推荐

