2015-03-03 122 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]