beautifulsoup:无法在一个循环中提取所有元素

2024-04-26 14:03:51 发布

您现在位置:Python中文网/ 问答频道 /正文

代码:

from bs4 import BeautifulSoup
soup = BeautifulSoup('<div><p>p_string</p><div>div_string</div></div>')
for m in soup.div:
    print "extract(first loop): ", m.extract()
print "current soup.div(frist loop): ", soup.div #it contains another div block
print '___________________________________________________________'

#I have to do another for loop to purge the remaining div block, why?
for m in soup.div:
    print "extract(second loop): ", m.extract()

print "current soup.div(second loop): ", soup.div #removed

结果:

^{pr2}$

为什么它没有在第一个for循环中提取所有元素(pdiv)?在


Tags: to代码indivloopforstringanother
1条回答
网友
1楼 · 发布于 2024-04-26 14:03:51

这是因为您在循环中调用extract(),该循环从树中删除一个标记—在遍历标记的子对象时删除它们。它与iterating over the list and remove items from it in the loop基本相同。

相反,请使用^{}

for m in soup.div.find_all():
    print m.extract()

相关问题 更多 >