Python正则表达式用于删除html没有href属性的标签

时间:2013-06-21 06:10:27

标签: python html regex strip htmlcleaner

我有一个用lxml的Cleaner清理过的字符串,因此所有链接现在都是Content的形式。现在我想删除所有没有href属性的链接,例如

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

应该成为

Link to be removed

同样的:

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

Shoudl成为:

Other link to be removed

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

2 个答案:

答案 0 :(得分:2)

您可以使用BeautifulSoup,这样可以更轻松地找到没有<a>的{​​{1}}代码:

href

答案 1 :(得分: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():       删除标记,但保留其子项和文本。