0

我有一个用 lxml 的 Cleaner 清理过的字符串,所以所有链接现在都采用 Content 形式。现在我想去掉所有没有 href 属性的链接,例如

<a rel="nofollow">Link to be removed</a>

应该成为

Link to be removed

相同的:

<a>Other link to be removed</a>

应该变成:

Other link to be removed

只是所有缺少 href 属性的链接。它不必是正则表达式,但由于 lxml 返回一个干净的标记结构,它应该是可能的。我需要的是一个去掉了这种非功能性 a 标签的源字符串。

4

2 回答 2

2

您可以使用BeautifulSoup,这将更容易找到<a>没有标签的标签href

>>> from bs4 import BeautifulSoup as BS
>>> html = """
... <a rel="nofollow">Link to be removed</a>
... <a href="alink">This should not be included</a>
... <a>Other link to be removed</a>
... """
>>> soup = BS(html)
>>> for i in soup.find_all('a', href=False):
...     i.replace_with(i.text)
... 
>>> print soup
<html><body>Link to be removed
<a href="alink">This should not be included</a>
Other link to be removed</body></html>
于 2013-06-21T06:12:11.637 回答
1

使用drop_tag方法。

import lxml.html

root = lxml.html.fromstring('<div>Test <a rel="nofollow">Link to be <b>removed</b></a>. <a href="#">link</a>')
for a in root.xpath('a[not(@href)]'):
    a.drop_tag()

assert lxml.html.tostring(root) == '<div>Test Link to be <b>removed</b>. <a href="#">link</a></div>'

http://lxml.de/lxmlhtml.html

.drop_tag():删除标签,但保留其子标签和文本。

于 2013-06-21T06:25:54.720 回答