如何删除链接(除非链接具有特定内容)

时间:2018-12-14 10:06:47

标签: python beautifulsoup

我正在删除文件的所有链接,但是当内容为:“(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)

2 个答案:

答案 0 :(得分:2)

基本上,您可以一次性使用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>

答案 1 :(得分:1)

根据您提供的HTML,您可以尝试执行以下操作:

from bs4 import BeautifulSoup

htmlStr = """
            <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>
          """
soup = BeautifulSoup(htmlStr, 'html.parser')

for i in range(len(soup.find_all('a'))):
    h = soup.find_all('a')[i].get_text()
    if('VETADO' in h):
        print(h)

输出:

(VETADO)

这时,您知道哪些索引包含VETADO,并且可以将必要的内容添加到列表,数据框,变量或所需的任何内容。