python - 使用 python 和lxml模块从html中删除所有的javascript标签和样式标签

  显示原文与译文双语对照的内容

我正在使用 http://lxml.de/插件库解析一个html文档。 到目前为止,我已经了解了如何将标签从,中的html文档中删除,如何删除标记。? 但是,在文章中描述的方法留下了所有文本,去掉了标记,去掉了实际脚本。 我还找到了 lxml.html. clean.Cleaner http://lxml.de/api/lxml.html.clean.Cleaner-class.html的类引用,但是这很清楚,因为如何实际使用这个类来清理文档。 任何帮助,也许一个简短的例子对我有帮助 !

时间:

below 是一个执行你想要的事情的例子。 在HTML文档中,Cleaner 比使用 strip_elements 更好地解决问题,因为在这种情况下,你希望去除 <script> 标记;你还希望去除其他标记中的onclick=function() 属性。


#!/usr/bin/env python

import lxml
from lxml.html.clean import Cleaner

cleaner = Cleaner()
cleaner.javascript = True # This is True because we want to activate the javascript filter
cleaner.style = True # This is True because we want to activate the styles & stylesheet filter

print"WITH JAVASCRIPT & STYLES"
print lxml.html.tostring(lxml.html.parse('http://www.google.com'))
print"WITHOUT JAVASCRIPT & STYLES"
print lxml.html.tostring(cleaner.clean_html(lxml.html.parse('http://www.google.com')))

你可以在 lxml.html. clean.Cleaner 文档中获取选项列表;你可以设置为 True 或者 False ( 默认值),而其他选项则会列出如下列表:


cleaner.kill_tags = ['a', 'h1']
cleaner.remove_tags = ['p']

请注意,kill vs 移除的区别如下:


remove_tags:
 A list of tags to remove. Only the tags will be removed, their content will get pulled up into the parent tag.
kill_tags:
 A list of tags to kill. Killing also removes the tag's content, i.e. the whole subtree, not just the tag itself.
allow_tags:
 A list of tags to include (default include all).

你可以使用 strip_elements 方法删除脚本,然后使用 strip_tags方法删除其他标记:


etree.strip_elements(fragment, 'script')
etree.strip_tags(fragment, 'a', 'p') # and other tags that you want to remove

...