2016-02-09 26 views
-1

如何才能得到總沒有一個具體的divPython的 - 如何獲得總計不特定的div style屬性

的樣式屬性。例如:

<div class="div1" style="direction:rtl;text-align:center;clear:both;margin:.1em;margin-bottom:1em;"> 

這個div風格有5個風格屬性。

<div class="div2" style="direction:rtl;text-align:center;clear:both;margin:.1em;"> 

這個div風格有4個樣式屬性

+3

獲取樣式,從拆分';',算什麼? –

+0

你嘗試了什麼? –

回答

2
from bs4 import BeautifulSoup  

source = """ 
<div class="div1" style="direction:rtl;text-align:center;clear:both;margin:.1em;margin-bottom:1em;"> 
<div class="div2" style="direction:rtl;text-align:center;clear:both;margin:.1em;"> 
""" 
soup = BeautifulSoup(source, 'lxml') 
for div in soup.find_all('div'): 
    print div.get('style') 

這會給你這樣的輸出:

direction:rtl;text-align:center;clear:both;margin:.1em;margin-bottom:1em; 
direction:rtl;text-align:center;clear:both;margin:.1em; 

現在這些都是str對象。你可以按照你喜歡的方式將它們分成;和格式。作爲認定屬性的數量,你可以接近這樣的:

for div in soup.find_all('div'): 
    print len(filter(None , div.get('style').split(';'))) 

輸出:

5 
4 
+1

你可以用'None'替換'filter'中的'lambda x:x'。從文檔中引用「如果函數爲None,則假定標識函數,即所有可迭代的元素都被刪除」 –

+0

是的。感謝您的建議。在我潛意識裏,我認爲'lambda'函數總是首先出現在我的腦海裏。 –

1

使用BeautifulSoup解析器。

>>> soup = BeautifulSoup('''<div class="div1" style="direction:rtl;text-align:center;clear:both;margin:.1em;margin-bottom:1em;">''', 'html') 
>>> len([i for i in soup.select('.div1')[0]['style'].split(';') if i]) 
5