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

如何循环遍历查询并分页获取结果?分页爬取循环逻辑异常问题排查

解决多查询爬虫分页循环的问题

看起来你遇到的问题是循环逻辑没理清楚——你的代码在处理完一个查询的停止条件后,只是重置了n但没跳出当前查询的while循环,所以一直在重复同一个查询。我来帮你拆解问题,再给出修正后的方案:

问题根源分析

你的代码有两个核心问题:

  • n变量是在所有查询循环外初始化的,而且处理完一个查询的停止条件时,只是把n重置为1并continue回到while循环开头,这会让程序继续用当前的query重复执行分页请求,而不是切换到下一个查询。
  • continue语句的作用是跳过当前循环的剩余代码、回到循环开头,但你需要的是退出当前查询的while循环,去执行下一个查询。

修正后的代码

把n的初始化放到每个查询的循环内部,同时把continue改成break,让程序在达到停止条件时跳出当前查询的分页循环:

for query in queries:
    n = 1  # 每个查询单独初始化起始结果编号,避免查询间相互干扰
    while n < 580:
        url = urlbase + query + period + str(n)
        print(url)
        r = requests.get(url)
        html = parser.fromstring(r.text)
        print(html)
        
        if n > 575:
            # 达到停止条件,跳出当前查询的while循环,进入下一个query
            break
        else:
            n += 25  # 跳转到下一页的起始编号

额外优化建议

  • 把停止阈值和最大页码定义成常量,后续维护起来更方便:
    MAX_PAGE_NUM = 580
    STOP_THRESHOLD = 575
    
    for query in queries:
        n = 1
        while n < MAX_PAGE_NUM:
            # ... 其他代码 ...
            if n > STOP_THRESHOLD:
                break
            n +=25
    
  • 给请求部分加上异常处理,避免网络请求失败导致程序崩溃:
    try:
        r = requests.get(url)
        r.raise_for_status()  # 如果请求返回错误状态码,抛出异常
        html = parser.fromstring(r.text)
        print(html)
    except requests.exceptions.RequestException as e:
        print(f"请求{url}失败: {e}")
        # 可以选择跳过当前页或者退出循环,根据需求调整
        continue
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:07:42