#python
Вопрос:
Я хочу сравнить содержимое двух HTML-файлов с помощью скрипта Python. Я хочу, чтобы разница была в простом текстовом формате. Как я могу это получить? Кроме того, в этих файлах могут быть таблицы, как я могу определить разницу между этими таблицами?
Комментарии:
1. почему вы не можете загрузить исходники html и сравнить в beyond compare, извините, я не эксперт в этом
2. ТАК что я здесь, чтобы поддержать вас с вашим кодом. Вам нужно проделать небольшую начальную работу. Покажите, что вы пробовали. Каких результатов вы ожидали и что у вас получается.
Ответ №1:
Вы можете проверить, КАК ЭТО сделать: Сравните содержимое 2 HTML-файлов с веб-сайтом Python для справки.
import os
from bs4 import BeautifulSoup
def getfiles(path1, path2):
#Load files on root of path1 on files1
for root, dir, names in os.walk(path1):
files1 = names
break #Will break the for to read just the root folder
#Load files on root of path2 on files2
for root, dir, names in os.walk(path2):
files2 = names
break #Will break the for to read just the root folder
#Compares the two list of files and select files with the same name on both paths
interfiles = set(files1).intersection(files2)
#Select just HTML files on mylist
mylist = [ fi for fi in interfiles if fi.endswith('.html')]
print 'nI will check:', len(mylist), 'files in total... HOLD ON!n'
return mylist
def checkcontent(path1, path2):
#Get files from both paths
mylist = getfiles(path1, path2)
difcontent = 0
diftitles = 0
titles = []
notitles = []
print '='*50
print 'Files With Different Content'
print '='*50
for files in mylist:
#Select files on path1 and add them to the sooup
htmlDoc = open (path1 files, 'r ')
soup1 = BeautifulSoup(htmlDoc.read())
#Select div class description inside div class bodytext
find1 = soup1.select('.bodytext .description')
#Select H3 tags
header1 = soup1.h3
#Select files on path2 and add them to the sopu
htmlDoc = open (path2 files, 'r ')
soup2 = BeautifulSoup(htmlDoc.read())
#Select div class description inside div class bodytext
find2 = soup2.select('.bodytext .description')
#Select H1 tag
header2 = soup2.h1
#Check if the are H1 and H3 tags
if (header2 == None or header1 == None):
notitles.append(files)
#Compares headers
else:
for headers in header1:
h1 = headers
for headers2 in header2:
h3 = headers2
if not h1 == h3:
titles.append(files)
diftitles = 1
#Read lines on HTML files
for lines1 in find1:
l = lines1
for lines2 in find2:
n = lines2
#Compares content
if not l == n:
print files
difcontent = 1
#Print results
print 'n'
print '='*50
print 'Files With No Title'
print '='*50
for lines in notitles:
print lines
print 'n'
print '='*50
print 'Files With Different Titles'
print '='*50
for lines in titles:
print lines
print "nI've found", difcontent, 'files with different content'
print "I've found", diftitles, 'different titles'
def main():
mypath = "PATH_TO_FOLDER1"
mypath2 = "PATH_TO_FOLDER2"
checkcontent(mypath, mypath2)
if __name__ == "__main__":
main()
Ответ №2:
все, что вам нужно сделать, это проанализировать html, для этого вы можете использовать прекрасную библиотеку супа Python. Я мог бы дать вам код, который работал бы, если бы вы предоставили свой код.
Комментарии:
1. Это должен быть комментарий, а не ответ 🙂
Ответ №3:
Поскольку HTML на самом деле является XML-файлом, вам нужно сравнить два XML-файла. Я настоятельно рекомендую xmldiff. Вот два примера HTML, которые я взял из W3.
from xmldiff import main, formatting
diff = main.diff_files('a.html', 'b.html', formatter=formatting.XMLFormatter())
A.HTML
<!html-код документа><!html-код ДОКУМЕНТА>
<html><html>
<заголовок><заголовок>
<заголовок>Название страницы<заголовок></заголовок></заголовок></заголовок></заголовок>< / заголовок >
< / заголовок > < / заголовок >
< тело><h1>Это заголовок<h1></h1></h1>
<p>Это абзац.<p></p></body>
</html>
B.HTML
<!DOCTYPE html><!DOCTYPE html>
<html><html>
<заголовок><заголовок>
<заголовок>другое название<заголовок></заголовок></заголовок></заголовок>
</голова > < / голова>
<тело><h1>Это заголовок<h1></h1></h1>
<p>Это абзац.<p></p></body>
</html>
Ответ:
<!DOCTYPE html><!DOCTYPE html>
shoobx.com/diff»>
<head>
<title><дифференциала:удалить>страница</дифференциал:удалить><дифференциала:вставка>разных</дифференциал:вставка> заголовок</title>
</head>
<body><h1>Это заголовок<h1></h1></h1>
<p>Это абзац.<p></p></body>
</html>