from bs4 import BeautifulSoup
html='''
<h1> A </h1>
<p >AA </p>
<li>a1</li>
<li>a2</li>
<h2> B </h2>
<p >BB </p>
<li > b1</li>
<li > b2</li>
<li > b3</li>
<h3> C </h3>
<p >CC</p>
<li> c1</li>
'''
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,
find_all_next() は、.next_elements 属性を通じて現在のタグの後のタグと文字列を反復し、すべての修飾されたノードを返します
リーリー最後まで直接反復するため、このように使用できません
別の判断を行うには .next_siblings を使用します
実際、
結果:for
をネストする必要はありません。if
の単純な判断だけで済みます。 リーリーリーリー
これは n 個の複雑さですが、ネストは n^2 個の複雑さです。
for