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

递归式Web爬虫开发故障排查:层级URL抓取逻辑问题求助

问题分析

你的递归爬虫没达到预期效果,核心问题出在几个关键逻辑上:

  • 计数器传递错误:你把递减后的count传给了下一层递归,导致每深入一层,可抓取的URL数量就越来越少,而不是每层都保持固定的count个。
  • 参数混用:newtags = tags[:depth]用深度参数depth来截取链接数量,完全搞反了depth(爬取层数)和count(每层抓取数量)的用途。
  • 缺少递归终止条件:没有判断深度是否耗尽,会导致递归无限制进行,无法在指定深度停止。
  • 无效过滤判断:"http" in url应该检查新抓取的url3,而非原URL,这会导致错误过滤掉有效链接。
修正后的代码
from bs4 import BeautifulSoup
import requests

def extractURL(url, current_depth, max_depth, count_per_level):
    # 递归终止:当前深度超过最大允许深度则停止
    if current_depth > max_depth:
        return
    
    try:
        # 发送请求并处理异常
        response = requests.get(url, timeout=5)
        response.raise_for_status()
        soup = BeautifulSoup(response.text, 'lxml')
        tags = soup.find_all('a')
        
        valid_urls = []
        # 先收集所有符合要求的HTTP/HTTPS链接
        for link in tags:
            url2 = link.get('href')
            if url2 and url2.startswith(("http://", "https://")):
                valid_urls.append(url2)
        
        # 只取每层需要的指定数量链接
        target_urls = valid_urls[:count_per_level]
        
        # 打印层级关联关系
        for url3 in target_urls:
            print(f"{url} -> {url3}")
            print("----------------")
            # 递归调用:深度+1,保持每层抓取数量不变
            extractURL(url3, current_depth + 1, max_depth, count_per_level)
    
    except requests.exceptions.RequestException as e:
        print(f"请求{url}失败: {e}")

# 配置爬虫参数
initial_url = 'http://www.baidu.com'
max_depth = 3  # 总共爬3层(初始URL为第1层)
count_per_level = 3  # 每层抓取3个URL

# 启动爬虫,初始深度设为1
extractURL(initial_url, 1, max_depth, count_per_level)
print("Done")
关键修改说明
  • 分离深度参数:把当前深度current_depth和最大深度max_depth分开,每次递归时深度+1,超过最大值就终止,精准控制爬取层数。
  • 固定每层抓取数量:递归时传递原始的count_per_level,而非递减后的数值,确保每层都能抓取指定数量的URL。
  • 优化链接筛选逻辑:先收集所有有效链接再截取指定数量,避免因无效链接导致实际抓取数量不足。
  • 添加异常处理:捕获请求超时、HTTP错误等问题,防止爬虫因单个链接失败而崩溃。
  • 修正过滤条件:正确检查新链接的合法性,避免错误过滤。

修改后爬虫会按照你预期的结构运行:初始URL→3个关联URL→每个关联URL再爬3个,以此类推直到达到指定深度,输出格式也符合url -> url2的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 21:39:05