Предполагая, что вы ищете только изменения текста, а не изменения в HTML, вы можете вырезать вывод HTML после сравнения. Есть несколько способов добиться этого. Два, о которых я впервые подумал, были:
- RegEx, потому что это нативно в Python, и
- BeautifulSoup, потому что он был создан для чтения веб-страниц
Создайте функцию, используя любой из вышеперечисленных методов, чтобы вырезать вывод HTML
, например, используя BeautifulSoup
UPDATE
Еще раз прочитав документацию, мне кажется, что сравнение даст и фактическое HTML, однако вы можете создать дополнительный вывод, который показывает только текстовые изменения.
Также, чтобы не показывать весь документ , Я установил для параметра context
значение True
Используя BeautifulSoup
import re
import difflib
from bs4 import BeautifulSoup
def remove_html_bs(raw_html):
data = BeautifulSoup(raw_html, 'html.parser')
data = data.findAll(text=True)
def visible(element):
if element.parent.name in ['style', 'script', '[document]', 'head', 'title']:
return False
elif re.match('<!--.*-->', str(element.encode('utf-8'))):
return False
return True
result = list(filter(visible, data))
return result
def compare_files(file1, file2):
"Creates two comparison files"
file1 = file1.readlines()
file2 = file2.readlines()
# Difference line by line - HTML
difference_html = difflib.HtmlDiff(tabsize=8).make_file(file1, file2, context=True, numlines=5)
# Difference line by line - raw
difference_file = set(file1).difference(file2)
# List of differences by line index
difference_index = []
for dt in difference_file:
for index, t in enumerate(file1):
if dt in t:
difference_index.append(f'{index}, {remove_html_bs(dt)[0]}, {remove_html_bs(file2[index])[0]}')
# Write entire line with changes
with open('comparison.html', 'w') as outFile:
outFile.write(difference_html)
# Write only text changes, by index
with open('comparison.txt', 'w') as outFile:
outFile.write('LineNo, File1, File2\n')
outFile.write('\n'.join(difference_index))
return difference_html, difference_file
file1 = open('file1.html', 'r')
file2 = open('file2.html', 'r')
difference_html, difference_file = compare_files(file1, file2)