如何使用Python来比较两个HTML文件?

问题描述 投票:0回答:6

我想使用Python来比较两个HTML文件:

示例:

html_1 = """
<p>i love it</p>
"""
html_2 = """ 
<h2>i love it </p>
"""

diff 文件将如下所示:

diff_html = """
<del><p>i love it</p></dev><ins><h2>i love it</h2></ins>
"""

有Python库可以帮助我做到这一点吗?

python html diff
6个回答
13
投票

lxml 可以做类似于你想要的事情。来自文档:

>>> from lxml.html.diff import htmldiff
>>> doc1 = '''<p>Here is some text.</p>'''
>>> doc2 = '''<p>Here is <b>a lot</b> of <i>text</i>.</p>'''
>>> print htmldiff(doc1, doc2)
<p>Here is <ins><b>a lot</b> of <i>text</i>.</ins> <del>some text.</del> </p>

我不知道有任何其他 Python 库可以完成此特定任务,但您可能想查看逐字差异。他们可能会接近您想要的。

一个例子是 this,用 PHP 和 Python 实现(将其另存为

diff.py
,然后是
import diff

>>> diff.htmlDiff(a,b)
>>> '<del><p>i</del> <ins><h2>i</ins> love <del>it</p></del> <ins>it </p></ins>'

2
投票

Checkout diff2HtmlCompare(完全披露:我是作者)。如果您只是想直观地了解差异,那么这可能会对您有所帮助。如果您试图提取差异并用它做一些事情,那么您可以按照其他人的建议使用 difflib (上面的脚本只是包装 difflib 并使用 pygments 进行语法突出显示)。 Doug Hellmann 在详细介绍如何使用 difflib 方面做得非常好,我建议您查看他的教程


2
投票

我发现了两个有用的 Python 库:

  1. htmltreediff
  2. htmldiff

但是它们都使用Python的difflib lib来比较文本,而我想使用google的diff。


1
投票

您可以使用

difflib.ndiff()
查找“
-
”/“
+
”并将其替换为您想要的 HTML。

import difflib

html_1 = """
<p>i love it</p>
"""
html_2 = """
<h2>i love it </p>
"""

diff_html = ""
theDiffs = difflib.ndiff(html_1.splitlines(), html_2.splitlines())
for eachDiff in theDiffs:
    if (eachDiff[0] == "-"):
        diff_html += "<del>%s</del>" % eachDiff[1:].strip()
    elif (eachDiff[0] == "+"):
        diff_html += "<ins>%s</ins>" % eachDiff[1:].strip()

print diff_html

结果:

<del><p>i love it</p></del><ins><h2>i love it </p></ins>

0
投票

AFAIK,Python 在 difflib 中有一个构建可以做到这一点。


0
投票

不完全是你的输出,但是标准库difflib有一个简单的htmldiff工具,它将为你构建一个html diff表。

import difflib

html_1 = """
<p>i love it</p>
"""
html_2 = """ 
<h2>i love it </p>
"""

htmldiff = difflib.HtmlDiff()
html_table = htmldiff.make_table([html_1], [html_2]) # each item is a list of lines
© www.soinside.com 2019 - 2024. All rights reserved.