【发布时间】:2016-03-20 14:29:26
【问题描述】:
我正在尝试使用 Python3 操作 HTML 文件并删除具有特定 id-Tag 的 div。
有没有比混合使用 for-Loops 和 regex 更优雅的方式来操作或删除这个容器?
我知道,有 HTMLParser 模块,但我不确定这是否对我有帮助(它会找到相应的标签,但如何删除这些和内容?)。
【问题讨论】:
标签: python html regex python-3.x web
我正在尝试使用 Python3 操作 HTML 文件并删除具有特定 id-Tag 的 div。
有没有比混合使用 for-Loops 和 regex 更优雅的方式来操作或删除这个容器?
我知道,有 HTMLParser 模块,但我不确定这是否对我有帮助(它会找到相应的标签,但如何删除这些和内容?)。
【问题讨论】:
标签: python html regex python-3.x web
尝试lxml 和 css/xpath 查询。
例如,使用这个 html:
<html>
<body>
<p>Some text in a p.</p>
<div class="go-away">Some text in a div.</div>
<div><p>Some text in a p in a div</p></div>
</body>
</html>
您可以将其读入,删除带有“go-away”类的 div,然后输出结果:
import lxml.html
html = lxml.html.fromstring(html_txt)
go_away = html.cssselect('.go-away')[0] # Or with suitable xpath
go_away.getparent().remove(go_away)
lxml.html.tostring(html) # Or lxml.html.tostring(html).decode("utf-8") to get a string
【讨论】:
虽然我不能强调这一点
这是我使用正则表达式的方法。
from re import sub
new_html = sub('<div class=(\'go-away\'|"go-away")>.*?</div>', '', html)
尽管我认为这应该没问题,但你永远不应该使用正则表达式来解析任何东西。它通常会产生奇怪的、难以调试的问题。它会为你创造比你开始时更多的工作。 不要使用正则表达式解析。
【讨论】: