2017-04-25 50 views
1
<tr id="section_1asd8aa" class="main"> 
<td class="header"> 
    <table cellspacing="0" cellpadding="0"> 
     <tbody> 
     <tr> 
      <td style="font-family: arial,sans-serif; font-size: 11px;>DUMMY TEXT<a href="#">browser.</a> 
      </td> 
      </tr> 
     </tbody> 
    </table> 
</td></tr> 

上面是一个示例html,我想从html文件中提取所有类名。 输出:'{“c1”:“main”,“c2”:“header”}'有没有办法使用BeautifulSoup从HTML文件中提取所有类名?

+0

到目前为止你做了什么? –

+0

在这里'c1','c2'是什么?它们很重要吗? – Psidom

+0

@AzatIbrakov到目前为止我能够读取html,我可以获取每个html标签,但这不是我所期待的 –

回答

2

您可以使用find_all来获取一组节点,然后遍历节点集合并检查节点是否有class属性,如果有,返回类:

from bs4 import BeautifulSoup 
soup = BeautifulSoup("""<tr id="section_1asd8aa" class="main"> 
<td class="header"> 
    <table cellspacing="0" cellpadding="0"> 
     <tbody> 
     <tr> 
      <td style="font-family: arial,sans-serif; font-size: 11px;>DUMMY TEXT<a href="#">browser.</a> 
      </td> 
      </tr> 
     </tbody> 
    </table> 
</td></tr>""", "html.parser") 

要获得类名的列表:

lst = [node['class'] for node in soup.find_all() if node.has_attr('class')] 
lst 
# [['main'], ['header']] 

转换列表到词典:

{"c"+str(i): v for i, v in enumerate(lst)} 
# {'c0': ['main'], 'c1': ['header']} 

注意,类被包装在列表中,因为某些类可以有多个值。如果需要,您可以将该列表作为单个字符串加入。

{"c"+str(i): " ".join(v) for i, v in enumerate(lst)} 
# {'c0': 'main', 'c1': 'header'} 
相关问题