如何使用python来区分两个html文件

时间:2012-03-05 05:58:51

标签: python html diff

我想使用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 lib帮我这么做吗?

6 个答案:

答案 0 :(得分:9)

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 one,用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>'

答案 1 :(得分:1)

我想要两个有用的python库:

  1. htmltreediff
  2. htmldiff
  3. 但是,它们都使用python的difflib lib来区分文本。但我想使用谷歌的差异。

答案 2 :(得分:1)

结帐diff2HtmlCompare(完全披露:我是作者)。如果您尝试仅仅想象差异,那么这可能会对您有所帮助。如果您尝试提取差异并对其执行某些操作,则可以按照其他人的建议使用difflib(上面的脚本只包含difflib并使用pygments进行语法突出显示)。 Doug Hellmann在详细介绍如何使用difflib方面做得很好,我建议查看his tutorial

答案 3 :(得分:0)

AFAIK,python在difflib中有一个可以执行此操作的内置版本。

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

您可以使用difflib.ndiff()查找并替换&#34; -&#34; /&#34; +&#34;使用您想要的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>