from bs4 import BeautifulSoup
html='''
A
AA
a1
a2
B
BB
b1
b2
b3
C
CC
c1
'''
soup=BeautifulSoup(html,'lxml',from_encoding='utf-8')
for p in soup.findAll('p'):
print(p.text,end="")
for dt in p.find_all_next("li"):
print("\t",dt.text,end=",")
print()
期望输出 AA a1,a2
BB b1,b2,b3
CC c1
但是结果输出是
AA a1, a2, b1, b2, b3, c1,
BB b1, b2, b3, c1,
CC c1,
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
find_all_next()通过 .next_elements 属性对当前tag的之后的 tag和字符串进行迭代返回所有符合条件的节点
是直接迭代到底的不能这样用
用.next_siblings再加个判断吧
其实可以不用
for嵌套的,一个简单的if判断就可以:结果:
这样效率上要高很多,毕竟这是个 n 复杂度的,而
for嵌套则是 n^2 复杂度。