我正在删除文件的所有链接,但是当内容为:“(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)
答案 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,并且可以将必要的内容添加到列表,数据框,变量或所需的任何内容。