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

如何抓取网站导航栏并保留内容层级结构

抓取带层级的导航栏并转为字典(基于BeautifulSoup)

针对你遇到的导航栏层级丢失问题,直接提取文本会抹平主菜单和下拉菜单的关联,需要根据页面DOM结构遍历主菜单项及其对应的子菜单,构建目标字典。

实现步骤

  1. 定位导航栏中的主菜单项:找到导航栏下包含下拉菜单的顶级列表项
  2. 遍历每个主菜单项,提取主标题文本
  3. 定位当前主菜单项下的下拉子菜单,提取所有子项文本
  4. 将主标题作为键、子项列表作为值,存入字典

完整代码

from bs4 import BeautifulSoup as bs
import requests

url = 'https://www.tyremarket.com/Car-Tyres'
html_text = requests.get(url).text
soup = bs(html_text, 'html.parser')

# 初始化存储导航层级的字典
nav_dict = {}

# 定位所有主菜单项(目标网站中主菜单项是.navbar-nav下的顶级li)
main_menu_items = soup.select('nav .navbar-nav > li')

for item in main_menu_items:
    # 提取主菜单标题
    main_title = item.get_text(strip=True)
    # 定位当前主菜单项下的下拉子菜单
    sub_menu = item.select_one('ul.dropdown-menu')
    if sub_menu:
        # 提取所有子项的文本
        sub_items = [a.get_text(strip=True) for a in sub_menu.select('li a')]
        nav_dict[main_title] = sub_items
    else:
        # 没有下拉菜单的主项,值设为空列表
        nav_dict[main_title] = []

# 打印结果
for key, value in nav_dict.items():
    print(f"'{key}': {value}")

代码说明

  • 使用select方法精准定位DOM元素:nav .navbar-nav > li确保只取导航栏的顶级主菜单项,避免嵌套层级干扰
  • 对每个主菜单项,通过select_one('ul.dropdown-menu')检查是否存在下拉菜单
  • 子项文本通过遍历下拉菜单内的a标签提取,确保只获取有效链接文本
  • 无下拉菜单的主项会被赋值为空列表,保证字典结构统一

示例输出

{'Tyre Mantra': ['Advisory', 'Featured', 'News', 'Videos'], 'Car Tyres': ['By Vehicle Brand', 'By Tyre Brand', 'By Size'], 'SUV Tyres': ['By Vehicle Brand', 'By Tyre Brand', 'By Size'], ...}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:24:25