gpt4 book ai didi

python - BeautifulSoup tag.children 只获取奇数元素

转载 作者:行者123 更新时间:2023-11-28 18:06:04 24 4
gpt4 key购买 nike

我想使用以下代码将元素从一个标签移动到另一个标签:

soup = BeautifulSoup("<p>I wish I was bold.</p><p>me too</p><p>me three</p><p>me 4</p><p>5</p>")
d = soup.new_tag('div')
for tag in soup.body.children:
d.append(tag)

但是,这会产生...

>>> d
<div><p>I wish I was bold.</p><p>me three</p><p>5</p></div>

仅移动了奇数元素。我检查了 soup.body.children 看看它是什么样子(在移动任何东西之前),所有的标签似乎都在那里:

>>> list(soup.body.children)
[<p>I wish I was bold.</p>, <p>me too</p>, <p>me three</p>, <p>me 4</p>, <p>5</p>]

当我遍历 list(soup.body.children) 时,一切都按预期工作:

soup = BeautifulSoup("<p>I wish I was bold.</p><p>me too</p><p>me three</p><p>me 4</p><p>5</p>")
d = soup.new_tag('div')
for tag in list(soup.body.children):
d.append(tag)
>>> d
<div><p>I wish I was bold.</p><p>me too</p><p>me three</p><p>me 4</p><p>5</p></div>

为什么遍历 soup.body.children 只访问奇数标签,而遍历 list(soup.body.children) 访问所有的标签?

最佳答案

在第一种情况下,当您附加到 d 标记时,您实际上是在更改 soup.body.children 的大小,因为它 将标签soup移动到d

因此它在 0 处抓取标签并将其移动到 d。当它返回到 1 处的标签时,它们已经全部移动了,并且它捕获了最初在索引 2 处的标签。

查看此操作的一种方法是在每次迭代中实际打印 list(soup.body.children)。像这样:

for i, tag in enumerate(soup.body.children):
d.append(tag)
print(i)
print(list(soup.body.children))
print()

输出:

0 #<-- It's accessing this element
[<p>me too</p>, <p>me three</p>, <p>me 4</p>, <p>5</p>]

1
[<p>me too</p>, <p>me 4</p>, <p>5</p>]

2
[<p>me too</p>, <p>me 4</p>]

关于python - BeautifulSoup tag.children 只获取奇数元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53400210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com