我正在用BeautifulSoup.Noob对Python和BeautifulSoup做一些HTML清理。基于我在Stackoverflow的其他地方找到的答案,我已经正确地删除了如下标记:
[s.extract() for s in soup('script')]
但是如何删除内联样式呢?例如:
<p class="author" id="author_id" name="author_name" style="color:red;">Text</p>
<img class="some_image" href="somewhere.com">
应改为:
<p>Text</p>
<img href="somewhere.com">
如何删除所有元素的内联class,id,name和style属性?
我能找到的其他类似问题的答案都提到了使用CSS解析器来处理这个问题,而不是BeautifulSoup,但由于任务只是简单地删除而不是操作属性,并且是所有标签的通用规则,我希望找到一种方法来在BeautifulSoup中完成这一切。
7条答案
按热度按时间pnwntuvh1#
如果你只想删除所有的CSS,你不需要解析任何CSS。BeautifulSoup提供了一种删除整个属性的方法,如下所示:
另外,如果只想删除整个标签(及其内容),则不需要返回标签的
extract()
,只需要decompose()
:不是很大的区别,只是我在查看文档时发现的其他一些东西。您可以在BeautifulSoup documentation中找到关于API的更多细节,其中有许多示例。
cczfrluj2#
我不会在
BeautifulSoup
中这样做-您将花费大量时间尝试、测试和处理边缘情况。Bleach
完全可以满足您的需求。http://pypi.python.org/pypi/bleach如果你要在
BeautifulSoup
中这样做,我建议你像Bleach
一样使用“白名单”方法,决定哪些标签可能有哪些属性,并去除每个不匹配的标签/属性。i5desfxk3#
下面是我对Python3和BeautifulSoup4的解决方案:
它支持应该保留的属性的白名单。:)如果没有提供白名单,则所有属性都将被删除。
nnt7mjpx4#
lxml的清洁剂怎么样?
xzv2uavs5#
基于jmk的函数,我使用这个函数来删除基于白色名单的属性:
工作在Python2,美丽的汤3
wpcxdonn6#
不完美但短的:
8tntrjer7#
我使用re和regex实现了这一点。
输出:文本
您可以使用该函数,通过将正则表达式中的“style”替换为属性名称来剥离任何内联属性。