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

使用BeautifulSoup提取链接:递归抓取Next链接优化方案咨询

解决方案:通过「Next」链接递归抓取GitBook文档

完全可以通过定位页面的「Next」链接进行递归抓取,这是针对GitBook这类结构化文档站的高效爬取方案,比全量遍历去重更节省时间。

具体实现思路

  1. 定位「Next」链接
    GitBook页面的「Next」按钮通常带有标识性的特征:
  • 部分页面的链接标签会包含rel="next"属性;
  • 按钮文本直接为「Next」,可以通过文本匹配定位;
  • 也可能带有gitbook-link next这类特定类名。
    用BeautifulSoup可以快速筛选,比如:
next_link = soup.find('a', text='Next')
# 或者通过属性定位
next_link = soup.find('a', {'rel': 'next'})
  1. 递归抓取逻辑
  • 初始化一个集合记录已抓取的URL,避免重复(虽然按「Next」顺序理论上不会重复,但可防异常情况);
  • 抓取当前页面内容后,提取「Next」链接;
  • 若「Next」链接存在,拼接成完整URL(处理相对路径),递归调用抓取函数;
  • 加入请求延迟,避免触发反爬机制。

示例代码

import requests
from bs4 import BeautifulSoup
import time
from urllib.parse import urljoin

# 记录已抓取的URL
visited_urls = set()

def crawl_gitbook_page(url):
    if url in visited_urls:
        return
    visited_urls.add(url)

    # 发送请求,添加UA模拟浏览器
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
    }
    try:
        response = requests.get(url, headers=headers, timeout=10)
        response.raise_for_status()
    except Exception as e:
        print(f"抓取失败 {url}: {str(e)}")
        return

    # 解析页面(这里可根据需求提取内容,比如正文、标题等)
    soup = BeautifulSoup(response.text, 'html.parser')
    print(f"已抓取: {url}")

    # 定位并处理Next链接
    next_btn = soup.find('a', text='Next')
    if next_btn and 'href' in next_btn.attrs:
        next_url = urljoin(url, next_btn['href'])
        time.sleep(1)  # 延迟1秒,避免反爬
        crawl_gitbook_page(next_url)

# 启动抓取
start_url = "https://crmhelpcenter.gitbook.io/wahi-digital/getting-started/readme"
crawl_gitbook_page(start_url)

优势说明

这种方式顺着文档的官方阅读顺序抓取,能完整覆盖侧边栏的子页面(只要「Next」链接对应正确的后续页面),无需提前收集所有侧边栏链接,避免了动态加载子链接的抓取难题,整体效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:31:17