Я ищу, чтобы получить надежные отличия только контент (структурные изменения будут редкими и поэтому могут быть проигнорированы) страницы this. Более конкретно, единственное изменение, мне нужно, чтобы забрать новый Instruction ID добавил:Сравнение HTML с difflib
Чтобы получить ощущение, что difflib будет производить, я первый дифф два идентичных 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 ('а', 'а')
diffed.next()
производит следующее:
' a'
Так что я либо ожидал someth от difflib, что он не может или не будет предоставлять (и я должен изменить курс), или я злоупотребляю им? Каковы жизнеспособные альтернативы для различения HTML?
Нечетные: (я), когда я выполнить '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