如何用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
相关产品推荐
相关产品推荐

