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

