[実施したいこと]
Python/JavaScriptを使用して、2つのHTMLの差分となる場所をXpath(またはCSS Selector)で取得したいと考えています。
[試したこと]
- difflibでテキストとして差分取得
difflibを使用して、HTMLの差分を取得することは可能ですが、改行がされていないと差がある行が全体で出てしまったり、
HTMLタグの部分が改行されているとうまく対象の位置を特定できません。
- soup2dictでHTMLをdictionary化して、deepdiffでdictionaryの差分を取得
-> 親のタグ(該当の変更箇所の上位のtag)の #text にも差分が取れてしまい、大量の差分が取得できてしまいます。
何か良い方法、またはそのヒントになりそうな方法をご存知であれば、教えていただけないでしょうか?
Python
1import simplejson 2import requests 3from bs4 import BeautifulSoup 4from soup2dict import convert 5from deepdiff import DeepDiff 6 7def html2dict(html): 8 bs = BeautifulSoup(html, 'html.parser') 9 10 dict_result = convert(bs) 11 return dict_result['html'][0]['body'] 12 13def readData(filepath): 14 with open(filepath) as f: 15 s = f.read() 16 17 return s 18 19ahtml = readData('./data_diff/a.html') 20bhtml = readData('./data_diff/b.html') 21 22adict = html2dict(ahtml) 23bdict = html2dict(bhtml) 24 25del adict[0]['#text'] 26del bdict[0]['#text'] 27 28result = DeepDiff(adict, bdict) 29
あなたの回答
tips
プレビュー