from lxml.html.clean import clean_html, Cleaner
def clean(text):
try:
cleaner = Cleaner(scripts=True, embedded=True, meta=True, page_structure=True, links=True, style=True,
remove_tags = ['a', 'li', 'td'])
print (len(cleaner.clean_html(text))- len(text))
return cleaner.clean_html(text)
except:
print 'Error in clean_html'
print sys.exc_info()
return text
Run Code Online (Sandbox Code Playgroud)
我将上面(丑陋的)代码放在一起作为我最初进入python土地的代码.我正在尝试使用lxml清理器来清理几个html页面,所以最后我只剩下文本而没有别的 - 但试试我可能,上面似乎没有这样工作,我是仍然留下了一定数量的标记(它似乎没有被破坏的html),特别是链接,它们没有被删除,尽管我使用的是args remove_tags和links=True
任何想法发生了什么,也许我用lxml咆哮错误的树?我认为这是在python中进行html解析的方法吗?
我有这个代码:
evil = "<script>malignus script</script><b>bold text</b><i>italic text</i>"
cleaner = Cleaner(remove_unknown_tags=False, allow_tags=['p', 'br', 'b'],
page_structure=True)
print cleaner.clean_html(evil)
Run Code Online (Sandbox Code Playgroud)
我希望得到这个:
<b>bold text</b>italic text
Run Code Online (Sandbox Code Playgroud)
但相反,我得到了这个:
<div><b>bold text</b>italic text</div>
Run Code Online (Sandbox Code Playgroud)
是否有删除div标记包装的属性?
目前我在键入这个时遇到了麻烦,因为根据top我的处理器是100%而我的内存是85.7%,所有这些都被python占用.
为什么?因为我让它通过一个250兆字节的文件来删除标记.250美元,就是这样!我一直在使用许多其他模块和东西在python中操作这些文件; BeautifulSoup是第一个给我带来如此小的问题的代码.如何使用近4个RAM来操作250megs的HTML?
我发现(在stackoverflow上)并且一直在使用的单行是这样的:
''.join(BeautifulSoup(corpus).findAll(text=True))
Run Code Online (Sandbox Code Playgroud)
此外,这似乎删除了所有BUT标记,这与我想要做的相反.我确信BeautifulSoup也能做到这一点,但速度问题仍然存在.
有没有什么可以做类似的事情(删除标记,可靠地保留文本)并且不需要Cray运行?
我想处理一些HTML代码并删除标签,如示例中所示:
"<p> <b>这个</ b>是一个非常有趣的段落.</ p>"结果"这是一个非常有趣的段落."
我使用Python作为技术; 你知道我可以用来删除HTML标签的任何框架吗?
谢谢!