要解决BeautifulSoup的next_siblings生成器不循环的问题,可以使用一个while循环来不断调用next_sibling方法,直到没有下一个兄弟节点为止。下面是一个示例代码:
from bs4 import BeautifulSoup
html = """
标题1
段落1
段落2
标题2
段落3
段落4
"""
soup = BeautifulSoup(html, 'html.parser')
container = soup.find(class_='container')
current_sibling = container.next_sibling
while current_sibling is not None:
if current_sibling.name is not None:
print(current_sibling)
current_sibling = current_sibling.next_sibling
在上面的例子中,我们首先使用find方法找到class为"container"的元素,然后使用next_sibling方法获取它的下一个兄弟节点。在while循环中,我们不断调用next_sibling方法来获取下一个兄弟节点,直到没有下一个兄弟节点为止。
这样就可以遍历容器元素的所有兄弟节点了。输出结果如下:
标题1
段落1
段落2
标题2
段落3
段落4
注意:如果你想要遍历除了当前元素以外的所有兄弟节点,可以在while循环中加上一个判断条件,如下所示:
current_sibling = container.next_sibling
while current_sibling is not None and current_sibling != container:
if current_sibling.name is not None:
print(current_sibling)
current_sibling = current_sibling.next_sibling
这样就可以遍历容器元素除了自身以外的所有兄弟节点了。