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

Python中如何迭代更新包含URL的字典实现翻页爬取

迭代爬取分页内容的修改方案

你当前的问题是for item in loc_dict遍历的是初始化时的固定集合,遍历过程中新增的元素不会进入当前遍历队列,自然无法迭代爬取下一页。按以下步骤修改即可:

1. 替换原有的URL存储结构

把原来固定的loc_dict集合,改成「待爬队列+已爬集合」的组合,既可以实现动态新增待爬URL,也能避免重复爬取同一页面:

# 替换原有的loc_dict定义
to_crawl = ['https://www.trustpilot.com/review/www.veinclinics.com']
crawled = set()

2. 修改遍历逻辑为循环消费待爬队列

把原来的for item in loc_dict:替换成while循环,只要待爬队列不为空就持续执行爬取逻辑:

# 替换原for循环
while to_crawl:
    item = to_crawl.pop(0)
    # 跳过已经爬过的页面
    if item in crawled:
        continue
    
    # 以下是你原来的代码逻辑,不需要改动
    flag = "bad"
    while flag == "bad":
        print(item)
        # ... 剩余原有逻辑保持不变

3. 新增下一页URL入库逻辑

在你拿到real_url的位置,先判断是否存在下一页,再把有效下一页URL加入待爬队列,同时还要把当前爬完的页面加入已爬集合:

# 你原有找下一页的逻辑优化
find_all_a = soup.find_all("a", {"rel":"next"}, href=True)
if find_all_a:
    tags = find_all_a[0]['href']
    real_url = 'https://www.trustpilot.com' + str(tags)
    print(real_url)
    # 有效下一页加入待爬队列
    if real_url not in crawled and real_url not in to_crawl:
        to_crawl.append(real_url)

# 当前页面处理完成,加入已爬集合
crawled.add(item)

注意原有代码的潜在问题

  • 你现有代码中time.sleep(wait_time)的缩进错误,目前在while flag == "bad"代码块之外,会导致页面加载后等待逻辑失效,需要调整缩进和driver.get(item)逻辑同级
  • 取随机代理、随机UA时建议用random.randint(0, len(xxx)-1)生成索引,random.uniform返回浮点数转int可能出现索引越界问题
  • 如果你运行环境是Python3,需要把所有无括号的print语句调整为带括号的标准写法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:54:00