Сравнение содержимого двух HTML-страниц в Python

#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>