首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HTML与difflib的比较

HTML与difflib的比较
EN

Stack Overflow用户
提问于 2016-02-11 21:00:28
回答 1查看 4.3K关注 0票数 0

我希望得到可靠的差异的内容,只有(结构变化将是罕见的,因此可以忽略)的页面。更具体地说,我需要做的唯一改变就是添加了一个新的指令ID:

为了了解difflib将产生的内容,我首先区分了两个相同的HTML内容,希望什么也得不到:

代码语言:javascript
复制
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,则会得到类似于HTM的东西L (尽管它不会在浏览器中呈现)。

事实上,如果我以最简单的例子来区分两个字符:

diffed = d.compare('a','a')

diffed.next()生成以下内容:

代码语言:javascript
复制
'  a'

所以,我要么期待着不能或不会提供的东西(我应该改变策略),要么我是在滥用它?什么是区分HTML的可行方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-11 21:39:29

Differ.compare()的参数应该是字符串序列。如果使用两个字符串,则每个字符串将被视为序列,因此将按字符进行比较。

因此,您的示例应该重写为:

代码语言:javascript
复制
url = 'https://secure.ssa.gov/apps10/reference.nsf/instructiontypecode!openview&restricttocategory=POMT'
response = urllib.urlopen(url)
content = response.readlines()  # get response as list of lines
import difflib
d = difflib.Differ()

diffed = d.compare(content, content)
print('\n'.join(diffed))

如果您只想比较html文件的内容,您可能应该使用解析器来处理它,并且只获取没有标记的文本,例如使用BeautifulSoup的字符串

代码语言:javascript
复制
soup = bs4.BeautifulSoup(html_content)
diff = d.compare(list(soup.stripped_strings), list_to_compare_to)
print('\n'.join(diff))
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35349921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档