当前位置: 首页 > 面试题库 >

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

韩寂离
2023-03-14
问题内容

我正在使用http://lxml.de/库解析html文档。到目前为止,我已经弄清楚了如何从html文档中剥离标签。在lxml中,如何删除标签但保留所有内容?但是该文章中描述的方法将保留所有文本,剥离标签而不会删除实际脚本。我还找到了一个对lxml.html.clean.Cleaner的类引用http://lxml.de/api/lxml.html.clean.Cleaner-
class.html,
但这对于如何实际使用该类很明显清洁文档。任何帮助,也许是一个简短的例子对我都会有所帮助!


问题答案:

下面是执行所需操作的示例。对于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文档中获得可以设置的选项的列表;您可以将某些选项设置为TrueFalse(默认),而其他选项则采用以下列表:

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

注意kill和remove之间的区别:

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).


 类似资料:
  • 问题内容: 我想在pastebin上将脚本标签从此html中剥离 http://pastebin.com/mdxygM0a 我尝试使用以下正则表达式 但是它不会删除html中的所有脚本标签。它仅删除嵌入式脚本。请我需要一个可以删除所有脚本标签(行内和多行)的正则表达式。如果对我的样本http://pastebin.com/mdxygM0a进行测试,将不胜感激 谢谢 问题答案: 尝试使用正则表达式删

  • 问题内容: 我正在尝试从Javascript的字符串中删除所有html标记。这是我所拥有的…我不知道为什么它不起作用....有人知道我在做什么错吗? 非常感谢! 问题答案: 尝试此操作,注意HTML语法太复杂,以至于正则表达式在100%的时间内都是正确的: 如果您愿意使用jQuery之类的库,则可以执行以下操作:

  • 问题内容: 我对正则表达式不太满意,但是对于PHP,我想从TinyMCE返回的字符串中的HTML标记中删除属性。 所以换成香草。 我将如何通过类似功能来实现这一目标? 问题答案: 务实的正则表达式将在所有合理的情况下解决此问题。不是第一个捕获组的匹配部分应删除,如下所示: 匹配一个后跟一个或多个“ not ”的字符,直到我们到达该部分为止。该更令其一起工作。将此匹配替换为,这是捕获的组。如果标记不

  • 问题内容: 问题是这样的:我有一个像这样的XML片段: 为了得到结果,我想删除所有-和-Tags,但保留它们的(文本)内容和子节点不变。另外,-Element应该保持不变。结果应该这样 目前,我将回到一个非常肮脏的把戏:我将etree.tostring这个片段,通过正则表达式删除有问题的标签,并用etree.fromstring结果替换原始片段(不是真正的代码,但是应该这样): 我知道我可能可以使

  • 假设我有一个像这样的html片段: 我想从中得到的是: 所以我的问题是:如何从html中去掉所有包装标签,只得到与html中相同顺序的文本?正如您在标题中看到的,我想使用jsoup进行解析。 重音html示例(请注意“á”字符): 我想要的是: 这个html不是静态的,一般来说,我只是想解码人类可读形式的通用html片段的每一个文本,宽度线中断。

  • 问题内容: 我有这个HTML代码: 但它应该变成(对于所有可能的html标签): 问题答案: 改编自我对类似问题的回答 RegExp细分: 添加一些引号,并使用替换文本,它应该删除标记名之后的所有文本,直到标记结尾或just 为止。 请注意, 这不一定适用于 所有 输入,因为Anti-HTML + RegExp会告诉您。有一些后备功能,最明显的是会失败,还有其他一些坏的问题…我建议将Zend_Fi