2017-04-25 17 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'} 
関連する問題