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

如何用BeautifulSoup仅解析父级li标签并合并其子标签文本?

用BeautifulSoup只取顶级li并合并嵌套文本的解决办法

你现在的代码会把所有li(包括嵌套在ol里的子li)都输出,而需要的是只处理那些不被其他列表嵌套的顶级li,同时把它内部嵌套li的文本合并到自身文本里。

两种可行方案

方案1:只找直接子级li(适合顶级li是当前节点直接子元素的情况)

用find_all的recursive=False参数,只抓取当前soup对象的直接子li,跳过深层嵌套的子li:

from bs4 import BeautifulSoup

soup = BeautifulSoup(fp, 'html.parser')
# 仅获取当前节点的直接子li,不递归查找后代里的li
for li in soup.find_all("li", recursive=False):
    # 提取所有文本,自动去掉多余换行和空格,用空格连接
    output_text = li.get_text(strip=True, separator=' ')
    print(output_text)
    print("--sep--")

方案2:用CSS选择器精准筛选顶级li(通用场景)

如果你的顶级li不在html直接子层级(比如放在ul里),用li:not(li li)这个CSS选择器,能选中所有不是其他li后代的li,也就是顶级li:

from bs4 import BeautifulSoup

soup = BeautifulSoup(fp, 'html.parser')
# 筛选出所有非嵌套的顶级li
for li in soup.select("li:not(li li)"):
    output_text = li.get_text(strip=True, separator=' ')
    print(output_text)
    print("--sep--")

效果说明

get_text(strip=True, separator=' ')会自动把当前li及其所有子孙节点的文本全部提取出来,同时清理掉每个文本块前后的空白,用空格合并成连贯的内容,正好匹配你想要的输出格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:55:13