2016-02-09 23 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