2015-03-03 121 views
1

我试图创建一个unittest可以找到身体标签内的html标签,我试图做出以下测试,但由于某种原因,我看到语法错误,我有正确设置美丽的汤,等:美丽的汤发现标签标签

for tag in soup.find_all(re.compile("""<html.*><body.*></body></html>""")): 
    count+=1 
self.assertEqual(count,1) 
+0

为什么这样?为什么不只是搜索所有'html'标签,然后检查每个'html'标签内是否有'body'标签? – Manhattan 2015-03-03 01:53:41

+0

那么我想做的测试是专门找到body标签是在html标签内。 – Marorin 2015-03-03 02:32:20

回答

2

可以使用.parent属性,看看有什么感兴趣的标签的父标签是:

html = '<html>\ 
<head>\ 
    <title>Test</title>\ 
</head>\ 
<body>\ 
    bla\ 
<a><body></body></a>\ 
</body>\ 
</html>\ 
<body>\ 
bla\ 
</body>' 

from bs4 import BeautifulSoup 

soup = BeautifulSoup(html, 'html.parser') 
bodies = soup.findAll('body') 
for body in bodies: 
    parent = body.parent.name 
    if (parent == 'html'): 
    print('Good! Parent = ' + body.parent.name) 
    else: 
    print('Uh oh! Parent = ' + body.parent.name) 

样本文件包含<body>标签这是正确的一个<html>标签的孩子,一个嵌套在其他标签中,另一个完全在文档之外。输出是这样的:

Good! Parent = html 
Uh oh! Parent = a 
Uh oh! Parent = [document]