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

如何使用Python的BeautifulSoup跳过<ul>的第一个元素?

如何用BeautifulSoup直接排除第一个
  • 元素获取车辆链接和名称?
  • 当然有办法直接通过BeautifulSoup的选择器语法跳过第一个「All Cars」对应的<li>元素,不用在循环里手动判断跳过。这里给你几种简洁的实现方式,都是利用CSS选择器或者BeautifulSoup的过滤能力来直接定位目标元素:

    方法1:使用CSS伪类:nth-of-type(n+2)

    这个伪类可以直接选中列表里第2个及之后的所有<li>元素,完美跳过第一个项:

    from bs4 import BeautifulSoup
    
    html = '''<ul class="nav nav--stacked" id="designer-list"> <li> <h2> <a class="text-uppercase bold router-link-active" href="/en-ca/cars_all"> All Cars </a> </h2> </li> <li> <a href="/en-ca/cars/c1"> <span> The car c1 </span> </a> </li> <li> <a href="/en-ca/cars/c2"> <span> The car c2 </span> </a> </li> </ul>'''
    
    soup = BeautifulSoup(html, 'html.parser')
    
    # 直接选取第2个及之后的li元素
    car_items = soup.select('#designer-list li:nth-of-type(n+2)')
    
    for item in car_items:
        href = item.find('a')['href']
        car_name = item.find('span').get_text(strip=True)
        print(f"{href} => {car_name}")
    

    方法2:使用相邻兄弟选择器~

    li ~ li会选中所有跟在第一个<li>之后的同级<li>元素,效果和上面完全一致:

    # 替换上面的car_items行即可
    car_items = soup.select('#designer-list li ~ li')
    

    方法3:通过元素特征排除第一个项

    第一个<li>里包含<h2>标签,而其他车辆项没有,我们可以用:not(:has(h2))来精准排除包含<h2>的<li>:

    # 替换上面的car_items行即可
    car_items = soup.select('#designer-list li:not(:has(h2))')
    

    方法4:用BeautifulSoup的find_all结合lambda过滤

    如果你更习惯用BeautifulSoup原生的find_all方法,也可以用lambda表达式来过滤元素:

    car_items = soup.find_all('li', lambda tag: tag.parent.get('id') == 'designer-list' and not tag.find('h2'))
    

    这几种方法都能直接拿到目标的车辆项,无需在循环里手动跳过第一个元素,代码更简洁且语义明确。

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

    相关产品推荐
    方舟 Agent Plan

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

    最近更新时间:2026.05.29 06:46:05