如何从文本中删除所有的a标签

9

我有一个脚本��以替换“ahref”标签中的单词。但是我想完全删除a href,这样您就可以看到没有链接的单词Google。

from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup('<p>Hello <a href="http://google.com">Google</a></p>')
for a in soup.findAll('a'):
    a['href'] = a['href'].replace("google", "mysite")
result = str(soup)

你能否找到所有放在 href 中的单词,并在它们前后加上 " "。我不确定该如何处理。我猜这应该是在替换之前完成的。


你介意在代码里留下一个没有用的<a>标签吗?你可以直接使用 del a['href'] - Ry-
2个回答

17

使用del a['href'],就像你在普通字典上操作一样:

from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup('<p>Hello <a href="http://google.com">Google</a></p>')
for a in soup.findAll('a'):
    del a['href']

给你:

>>> print str(soup)
<p>Hello <a>Google</a></p>

更新:

如果您想完全摆脱<a>标签,您可以使用.replaceWithChildren()方法:

from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup('<p>Hello <a href="http://google.com">Google</a></p>')
for a in soup.findAll('a'):
    a.replaceWithChildren()

给你:

>>> print str(soup)
<p>Hello Google</p>

...并且,你在评论中所请求的内容(用空格包裹标签的文本内容)可以通过以下方式实现:

from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup('<p>Hello <a href="http://google.com">Google</a></p>')
for a in soup.findAll('a'):
    del a['href']
    a.setString(' %s ' % a.text)

给你:

>>> print str(soup)
<p>Hello <a> Google </a></p>

谢谢,但我在Google上看到的是链接还是普通文本?另外,在href中如何在"google"或任何单词之前插入一个空格呢?谢谢。 - user2784753
  1. 我不确定浏览器如何呈现没有href属性的<a>标签,为什么不自己尝试一下,而不是让我来检查呢?
  2. 我不确定你在问什么。
- Erik Kaplun
yup checked no links。一旦我获取了所有 "<a>",我想在<a>后面和</a>之前放置一个空格。所以<a href ="somthing">Hello</a>。应变为<a> Hello </a> - user2784753
已根据最新情况更新了我的回答。 - Erik Kaplun
据我所知,find_all现在比findAll更受青睐(后者仅用于向后兼容)。 - PatrickT

7
你可以使用漂白剂。
pip install bleach

然后像这样使用它...

import bleach
from BeautifulSoup import BeautifulSoup

soup = BeautifulSoup('<a href = "somesite.com">hello world</a>')
clean = bleach.clean(soup,tags[],strip=True)

这导致...
>>> print clean
u'hello world'

这里是bleach的文档链接

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接