Python 3.8 - BeautifulSoup 4 - unwrap() 不删除所有标签

Python 3.8 - BeautifulSoup 4 - unwrap() does not remove all tags

我已经在 SO 上搜索了很长一段时间,但我找不到解决这个问题的方法。对不起,如果它是重复的。

我正在尝试从片段中删除所有 HTML 标签,但我不想使用 get_text() 因为可能还有一些其他标签,例如 img,我想稍后使用。 BeautifulSoup 与我预期的不太一样:

from bs4 import BeautifulSoup

html = """
<div>
<div class="somewhat">
    <div class="not quite">
    </div>
    <div class="here">
    <blockquote>
        <span>
            <a href = "sth.jpg"><br />content<br /></a>
        </span>
    </blockquote>
    </div>
    <div class="not here either">
    </div>
</div>
</div>
"""

soup = BeautifulSoup(html, 'html.parser')
la_lista = []
for x in soup.find_all('div', {"class":"somewhat"}): # in all the "somewhat" divs
    for y in x.find_all('div', {"class":"here"}):    # find all the "here" divs
        for inp in y.find_all("blockquote"):         # in a "here" div find all blockquote tags for the relevant content
            for newlines in inp('br'):
                inp.br.replace_with("\n")            # replace br tags
            for link in inp('a'):
                inp.a.unwrap()                       # unwrap all a tags
            for quote in inp('span'):
                inp.span.unwrap()                    # unwrap all span tags
            for block in inp('blockquote'):
                inp.blockquote.unwrap()              # <----- should unwrap blockquote
            la_lista.append(inp)

print(la_lista)

结果如下:

[<blockquote>


content


</blockquote>]

有什么想法吗?

来自y.find_all("blockquote")的return的类型是bs4.element.Tag在他身上你不能用inp('blockquote')来调用标签本身。

您的解决方案是删除:

            for block in inp('blockquote'):
                inp.blockquote.unwrap()   

并替换:

la_lista.append(inp)

与:

la_lista.append(inp.decode_contents())

答案基于以下答案BeautifulSoup innerhtml