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
我已经在 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