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

如何用BeautifulSoup定位并提取每个li标签中的特定br标签?

如何用BeautifulSoup定位class为odd的li标签里的最后一个br元素?

我明白你现在的需求:要从每个带odd类的<li>标签里,精准定位到最后一个<br>标签(也就是对应示例里text3、text6、text9后面的那个br)。之前的代码只能提取文本内容,确实没法直接拿到目标br标签,下面我给你两种实用的解决方案:

核心思路

要定位每个<li class="odd">里的最后一个br,有两种直观的方法:

  • 先获取该li下所有的br标签,再取列表的最后一个元素
  • 用CSS选择器的伪类:last-of-type直接选中最后一个br

修改后的完整代码

from bs4 import BeautifulSoup
import requests

URL = '...'  # 替换成你的目标网页地址
content = requests.get(URL)
soup = BeautifulSoup(content.text, 'lxml')
contentTable = soup.find_all("li", {"class": "odd"})

for li in contentTable:
    # 方法1:先获取所有br,再取最后一个(注意:如果li里没有br会报错,建议加判断)
    # br_list = li.find_all('br')
    # if br_list:
    #     last_br = br_list[-1]
    
    # 方法2:用CSS选择器直接选中最后一个br(更简洁,找不到时返回None,更安全)
    last_br = li.select_one('br:last-of-type')
    
    if last_br:
        # 这里可以对目标br做你需要的操作,比如查看前后文本、删除标签等
        print("目标br的前一段文本:", last_br.previous_sibling.strip())
        print("目标br的后一段文本:", last_br.next_sibling.strip())
        # 如果要删除这个br标签,执行:last_br.decompose()

细节说明

  1. 方法1的容错处理:如果某些<li class="odd">里可能没有br标签,记得先判断br_list是否为空,避免索引越界错误。
  2. 方法2的优势:select_one('br:last-of-type')会直接匹配当前li下的最后一个br元素,语法更贴近前端选择器逻辑,代码更简洁,而且找不到元素时返回None,不会抛出异常。
  3. 操作br标签:拿到last_br后,你可以做任何BeautifulSoup支持的操作——比如获取它的前后文本(用previous_sibling/next_sibling)、删除标签(decompose())、修改属性等等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 19:03:10