所以我试图给这些美丽的汤姆标签添加标签。 但是,使用此代码时,只有列表的最后一个标记会保留添加的标记。以前的标签会在迭代过程中出现,然后会丢失。变化不是持久的。如何修改列表中的对象并将它们返回到新列表中
import bs4
def add_tag(souplist, p):
newlist = []
for div in souplist:
div.append(p) # beautiful soup append
newlist.append(div) # list append
return newlist
输入
soup1 = bs4.BeautifulSoup('<html><body><div>a</div></body></html>').find('div')
soup2 = bs4.BeautifulSoup('<html><body><div>b</div></body></html>').find('div')
soup3 = bs4.BeautifulSoup('<html><body><div>c</div></body></html>').find('div')
souplist = [soup1, soup2, soup3]
p = bs4.BeautifulSoup('<p>foo</p>').find('p')
refinedlist = add_tag(souplist, p)
输出
我期待这个输出refinedlist:
>>> [<div>a<p>foo</p></div>, <div>b<p>foo</p></div>, <div>c<p>foo</p></div>]
,但我得到这个代替
>>> [<div>a</div>, <div>b</div>, <div>c<p>foo</p></div>]
注:如果做
newlist.append(deepcopy(div)) # list append
它的工作原理,但足够大的物体就会触发“最大递归限制超出了......”这可以通过这样的参数设置为(多)高值来避免异常。然而,当你看到自己修改sys参数并使用deepcopy来完成一个简单的操作时,我猜可能是某些事情做错了。
那么你通常如何获取对象列表,修改它们并返回带有修改对象的列表?必须有这样的共同任务
你是什么意思?我想我只做一个循环,对吧? – Danny 2014-08-27 15:57:33
当然!我在 – Danny 2014-08-27 16:05:45
这个问题中加入了它,但它不是问题,因为我总是可以使用find()并获取它。问题在于它不会持续列表中的所有3个元素。只有最后一个。我需要它在所有三个 – Danny 2014-08-27 16:43:40