beautifulsoup4:将for循环展开标签放入定义(python3)

时间:2017-01-02 21:13:56

标签: python python-3.x beautifulsoup

我怎么能把这个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')      

3 个答案:

答案 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