我怎么能把这个for循环放到一个定义中?
from bs4 import BeautifulSoup
html="<p>ABC <i>Italic1 </i><i>Italic2</i></p>"
soup = BeautifulSoup(html,"html.parser")
for i in soup.findAll('i'):
soup.i.unwrap()
print(soup)
我确实尝试过但没有成功:
def UnwrapTag(x):
x=str(x)
for x in soup.findAll(x):
soup.x.unwrap() #wrong but what else?
UnwrapTag('i')
答案 0 :(得分:2)
嗯,实际上你不应该在这里使用soup.i
。
soup.i
表示 <i>
变量中的第一个soup
元素。
仅仅因为你使用了相同的名字 - 它起作用了。您实际想要使用的是i
变量(而不是soup.i
)。
from bs4 import BeautifulSoup
html="<p>ABC <i>Italic1 </i><i>Italic2</i></p>"
soup = BeautifulSoup(html,"html.parser")
for i in soup.findAll('i'):
i.unwrap()
print(soup)
同样在这里:
def UnwrapTag(x):
x=str(x)
for x in soup.findAll(x):
x.unwrap()
UnwrapTag('i')
答案 1 :(得分:2)
回答出了什么问题?我认为你混淆x
使用它作为迭代的var和参数,这个代码的所有内容都是以原始代码:
from bs4 import BeautifulSoup
html="<p>ABC <i>Italic1 </i><i>Italic2</i></p>"
soup = BeautifulSoup(html,"html.parser")
def UnwrapTag(x):
#x=str(x) # no need to do this
for k in soup.findAll(x): # using k instead of x to catch values
k.unwrap()
print(soup)
UnwrapTag('i')
答案 2 :(得分:1)
def UnwrapTag(soup, target):
for x in soup.findAll(target):
print(x.text)
试验:
from bs4 import BeautifulSoup
html="<p>ABC <i>Italic1 </i><i>Italic2</i></p>"
soup = BeautifulSoup(html,"html.parser")
UnwrapTag(soup, 'i')
出:
Italic1
Italic2