2014-02-09 239 views
0

我想從源代碼中刪除樣式標籤及其內容,但它不工作,沒有錯誤只是不分解。這是我有:BeautifulSoup去除標籤

source = BeautifulSoup(open("page.html")) 
getbody = source.find('body') 
for child in getbody[0].children: 
    try: 
     if child.get('style') is not None and child.get('style') == "display:none": 
      # it in here 
      child.decompose() 
    except: 
     continue 
print source 
# display:hidden div's are still there. 
+0

您的語法無效;沒有'except'處理程序。如果你使用'except:pass' * remove *'try' /'except'來查看你所掩蓋的任何錯誤。 –

+0

'getbody [0]'也引發'KeyError'。 –

+0

我不知道該代碼如何不拋出任何'SyntaxError'。 – cdonts

回答

0

下面的代碼做你想做的和工作正常;做使用毯除了處理來掩蓋錯誤:

source = BeautifulSoup(open("page.html")) 
for hidden in source.body.find_all(style='display:none'): 
    hidden.decompose() 

或者更好的是,使用正則表達式來撒網更寬一點:

import re 

source = BeautifulSoup(open("page.html")) 
for hidden in source.body.find_all(style=re.compile(r'display:\s*none')): 
    hidden.decompose() 

Tag.children只列出的直接兒童body標籤,不是所有嵌套的孩子。

+0

使用'findAll(style ='display:none'):'把它排序,奇數。謝謝。當我可用時將接受答案 – user273324

+0

@ user273324:這是因爲'.children'只列出直接後代,而不是子樹中的所有元素。 –