所以我想给那些漂亮的汤标签加上一个标签。 但是,使用此代码时,只有列表的最后一个标记将保留添加的标记。以前的标签将在迭代期间拥有它,然后将丢失它。变化不是持久的。你知道吗
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只是为了完成一个简单的操作时,我猜可能是做错了什么。你知道吗
那么,您通常如何获取对象列表、修改它们并返回一个包含修改对象的列表呢?对于这种共同的任务,必须有一种更简单的方法
您需要为每个append创建一个新的
p = bs4.BeautifulSoup('<p>foo</p>').find('p')
对象相关问题 更多 >
编程相关推荐