我期待獲得內容的可靠差異(結構性更改將是罕見的,因此可以忽略)的this頁面。更具體地講,我需要拿起唯一的變化是增加了一個新的指令ID:比較HTML和difflib
爲了獲得所difflib會產生,我第一次diff的2項相同 HTML內容,希望的感覺得到任何回報:
url = 'https://secure.ssa.gov/apps10/reference.nsf/instructiontypecode!openview&restricttocategory=POMT'
response = urllib.urlopen(url
content = response.read()
import difflib
d = difflib.Differ()
diffed = d.compare(content, content)
由於difflib模仿了UNIX diff
工具,我希望diffed
包含什麼(或給一些跡象表明,該序列是相同的,但若真我'\n'.join
diffed
,我得到something resembling HTM L,(雖然它不會在瀏覽器中渲染)
事實上,如果我拿最簡單的情況可能版本比較兩個漢字:
diffed
= d.compare( '一個', 'A')
diffed.next()
產生以下:
' a'
因此,我期望任someth從difflib,它不能或不會提供(我應該改變粘性),還是我濫用它?什麼是可行的替代方法來區分HTML?
奇數:(i)當我執行'd.compare(內容,內容)',其中'content'現在'.readlines的輸出()'而不是'。 read()',輸出仍然是完整的HTML文檔,儘管內容相同,儘管每行都用換行符隔開(ii)同樣,使用您建議的bs4方法 - 比較list(soup.stripped_strings)和list (soup.stripped_strings)',輸出仍然是完整的HTML文檔(標籤被刪除)。我在這裏誤解了什麼? – Pyderman
這就是[Differ](https://docs.python.org/3/library/difflib.html#difflib.Differ)的工作方式,它會返回整個文檔,如果有變化,它們將以' -'或'+'表示從輸入a中刪除並添加到輸入b中的行。所以如果兩個輸入相等,你就不會得到任何帶這樣的前綴的行。 – mata
我明白了。謝謝。我已經把這些知識用在這裏。我歡迎你的想法:http://stackoverflow.com/q/35375004/1389110 – Pyderman