2016-05-18 11 views
1

私は、テキストの各単語のタグのクラスを教えてくれる関数を作成しようとしています。Beautifulsoup:各単語のクラス名を取得

私のHTMLは、このようなものです:私はループにのfindAll( 'スパンを持つすべてのスパンを試してみました

[["I", A], ["am", A], ["not", C], ["doing", B], ["a", B], ["great", B], ["job", B]] 

:だから私はリストを返す関数を作成したいと思います

<p> 
<span class="A">I am </span> 
<span class="B"><span class="C"> not </span> doing a great job </span> 
</p> 

'、recursive = False)、子供がいる場合は各スパンをチェックして、私はいつもダブルスを取得します。 たとえば、私は "偉大な仕事をしていない"と "ない"を得るでしょう。

for p in p_tags: 
    my_tag_list = [] 
    spans = p.findAll("span", recursive=False) 
    for s in spans: 
    text = s.text.split() 
    for t in text: 
     my_tag = [] 
     my_tag.append(t) 
     my_tag.append(s["class"][0]) 

私はマニュアルを見てきましたが、私は私のテキストとその周りに直接スパンを取得する任意の方法を見つけるように見えることはありません。

from bs4 import BeautifulSoup 

data = """ 
<p> 
<span class="A">I am </span> 
<span class="B"><span class="C"> not </span> doing a great job </span> 
</p>""" 

soup = BeautifulSoup(data, "html.parser") 

result = [] 
for text in soup.p.find_all(text=True): 
    parent = text.parent 
    parent_class = parent["class"][0] if "class" in parent.attrs else "" 
    for word in text.split(): 
     result.append([word, parent_class]) 

print(result) 

は 種類あなたは、find_all(text=True)経由でテキストノードを反復木を登ると.parentのクラス属性を取得することができます

答えて

0

に関しては、任意の助けを事前にいただきありがとうございます印刷物:

[[u'I', u'A'], [u'am', u'A'], [u'not', u'C'], [u'doing', u'B'], 
[u'a', u'B'], [u'great', u'B'], [u'job', u'B']] 
関連する問題