使用Beautifulsoup检查重复的标签

时间:2014-03-01 01:07:38

标签: python

我有一个html文件:

<html>
<html>

</html>
</html>

我正在尝试在test.py文件中使用beautifulsoup读取此文件,我正在测试任何重复的html标记。我有以下断言条件,检查是否存在html标记但没有任何条件来检查单个文件中是否存在重复的html标记。

def testing(self):
    try:
        assert self.soup.find('html') != None
    except AssertionError, e:
        raise Exception("HTML Tag is missing!") 

如何在测试中包含此内容?

2 个答案:

答案 0 :(得分:0)

assert len(self.soup.findAll('html', recursive=False)) == 1应该有用。

答案 1 :(得分:0)

指定html.parser,找到所有html标记并检查您找到了多少个。

以下是一个例子:

from bs4 import BeautifulSoup


invalid = """<html>
<html>

</html>
</html>"""

soup = BeautifulSoup(invalid, 'html.parser')
print len(soup.find_all("html"))  # prints 2

valid = """<html>
</html>"""

soup = BeautifulSoup(valid, 'html.parser')
print len(soup.find_all("html"))  # prints 1

在你的测试中它将是:

assert len(self.soup.find_all('html')) == 1

此外,在这种情况下,不要使用assert,而是更好地使用unittest的self.assertEqual():它有一个msg参数,可以帮助您使测试更具可读性和pythonic:

self.assertEqual(len(self.soup.find_all('html')), 1, msg="HTML Tag is missing!")