Python Selenium爬虫下一页导航逻辑的正确插入位置
多页爬取的正确逻辑插入方案
之前尝试失效的核心原因
你将下一页点击逻辑放入单条住宿详情爬取的for循环中无法生效,本质是运行上下文不匹配:
- 现有
scrape_results函数中,遍历单条URL的循环运行时,driver已经切换到对应酒店的详情页面,不存在结果列表页的分页按钮元素,自然无法触发跳转操作。 - 分页操作必须停留在搜索结果列表页的上下文执行,不能穿插在详情爬取的流程中间。
匹配现有代码结构的正确插入位置
可直接沿用你原本「先批量收集全量目标URL、再逐个爬取详情」的执行逻辑,不需要打乱原有代码的分层结构,具体修改如下:
- 在
scrape_results函数初始化阶段新增两个核心变量:- 存储所有已收集URL的空累计列表
- 目标爬取数阈值(即传入函数的
n_results参数值)
- 将原本的单页URL收集流程替换为可循环的分页收集流程,插入点位于当前页URL提取完成后、启动详情爬取for循环之前,执行顺序为:
- 循环启动后,通过
sr-hotel__title、hotel_name_link选择器提取当前结果页的所有酒店URL,追加到累计URL列表中 - 实时校验累计URL数量:如果已经达到设定的
n_results阈值,立刻终止循环,不再执行翻页操作 - 如果未达到阈值,执行下一页跳转逻辑:先检查
paging-next类名对应的按钮是否为可点击状态(规避最后一页按钮禁用的报错场景),确认可点击后执行点击操作 - 点击后添加显式等待逻辑,直到新一页的结果标题元素加载完成,再回到循环开头提取新页面的URL
- 循环启动后,通过
- 等所有分页、URL收集的循环完全结束,再运行你原本的「遍历累计URL列表、逐个调用
scrape_accommodation_data爬取详情数据」的原有逻辑,这部分代码无需做任何修改。
关键避坑要点
- 不要在收集完当前页URL后立刻启动详情爬取,否则driver会被切换到详情页上下文,后续再想返回结果列表页翻页,需要额外添加返回跳转逻辑,大幅提升程序崩溃概率。
- 翻页后不要立刻提取URL,必须等待新页面的结果元素加载完成,否则会因为页面渲染慢,提取到空值、旧页面的重复URL。
内容的提问来源于stack exchange,提问作者Julián Venhuizen
相关产品推荐
相关产品推荐

