首页 > 解决方案 > 如何删除链接,除非它具有特定内容

问题描述

我正在删除我文件的所有链接,但是当内容是:“(VETADO)”时,我不想删除。

一段网页:

<a href="http://www.plan.com.br/ccivil_03.htm">(VETADO)</a>
<a href="http://www.plan.com.br/ccivil_04.htm">(Incluído em 2009).</a>

在这种情况下,我想保留第一个的内容a并删除第二个。

那是我的代码:

for tag in soup.findAll():
    if tag.name in ['a', 'strike']:
      tag.decompose()

allp = soup.findAll('p')
for p in allp:
    nonBreakSpace = u'\xa0'
    result = p.text.replace('\n', '').replace(nonBreakSpace, '')  
    print(result)

预期的结果:

(VETADO)

标签: pythonbeautifulsoup

解决方案


您基本上可以使用text属性和过滤器一次性完成.decompose()

In [1]: from bs4 import BeautifulSoup

In [2]: data = """<div>
             <a href="http://www.plan.com.br/ccivil_03.htm">(VETADO)</a>
             <a href="http://www.plan.com.br/ccivil_04.htm">(Incluído em 2009).</a>
             </div>"""

In [3]: soup = BeautifulSoup(data, "html.parser")

In [4]: for a in soup.find_all("a", text=lambda text: text and "VETADO" in text):
             a.decompose()   

In [4]: soup.prettify()
<div>
 <a href="http://www.plan.com.br/ccivil_04.htm">
  (Incluído em 2009).
 </a>
</div>

推荐阅读