Как использовать Python для сравнения двух HTML-файлов - PullRequest
8 голосов
/ 05 марта 2012

я хочу использовать python для сравнения двух html-файлов:

пример:

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

файл сравнения будет выглядеть так:

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

есть ли такой pythonlib помоги мне сделать это?

Ответы [ 6 ]

9 голосов
/ 05 марта 2012

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 для этой конкретной задачи, но вы можете посмотреть пословные различия. Они могут приближаться к тому, что вы хотите.

Один из примеров - , этот , реализованный на 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 голосов
/ 05 марта 2012

я нашел две библиотеки Python, которые полезны:

  1. htmltreediff
  2. htmldiff

, но, оба из них используют difflib lib Python для сравнения текста.но я хочу использовать Google Diff.

1 голос
/ 25 апреля 2015

Оформить заказ diff2HtmlCompare (полное раскрытие: я автор).Если вы пытаетесь просто визуализировать различия, то это может вам помочь.Если вы пытаетесь извлечь различия и что-то с ними сделать, то вы можете использовать difflib, как предлагают другие (скрипт выше просто оборачивает difflib и использует фрагменты для подсветки синтаксиса).Даг Хеллманн проделал довольно хорошую работу, подробно описав, как использовать difflib, я бы посоветовал проверить его урок .

0 голосов
/ 17 декабря 2014

Вы можете использовать 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 голосов
/ 07 марта 2012

Не совсем то, что вы выводите, но в стандартной библиотеке 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
0 голосов
/ 07 марта 2012

AFAIK, python имеет сборку в difflib , которая может сделать это.

...