2016-09-05 32 views
0
<div> 
<p class="tabbed" style="margin-top:2px;"><span class="tab"><strong>LANGUAGES</strong></span>Cantonese</p> 
<p class="tabbed" style="margin-top:2px;"><span class="tab"></span>English</p> 
<p class="tabbed" style="margin-top:2px;"><span class="tab"></span>Putonghua</p> 
<p class="tabbed"><span class="tab"><strong>GENDER</strong></span>Male</p> 
    </div> 

5行目に「男性」を抽出したいと思いますが、その方法はわかりません。誰も助けることができますか? 私は "gen = soup.find( 'span'、class _ = 'tab')。string"を試しましたが、動作しません。BeautifulSoupでタグ内のテキストを抽出する

答えて

0

あなたが.findAll()メソッドを使用することができます:あなたはスパンtext="GENDER"を見つけて、設定親pからテキストを取得することができ、あなたはすべてのタグを検索する必要はありません

In [37]: from bs4 import BeautifulSoup 

In [38]: soup = BeautifulSoup("""<div> 
    ...: <p class="tabbed" style="margin-top:2px;"><span class="tab"><strong>LANGUAGES</strong></span>Cantonese</p> 
    ...: <p class="tabbed" style="margin-top:2px;"><span class="tab"></span>English</p> 
    ...: <p class="tabbed" style="margin-top:2px;"><span class="tab"></span>Putonghua</p> 
    ...: <p class="tabbed"><span class="tab"><strong>GENDER</strong></span>Male</p> 
    ...: </div>""", "html") 

In [39]: soup.find(lambda tag: tag.text.startswith('GENDER')).text[6:] 
Out[39]: u'Male' 
+0

うわー、おかげでたくさん!ここで "ラムダタグ"と "テキスト[6:]"の機能/意味は何ですか? – peterchen

+0

@joycey https://docs.python.org/3/tutorial/controlflow.html#lambda-expressions –

0

resursive = Falseの

In [4]: from bs4 import BeautifulSoup 

In [5]: h = """<div> 
    ...: <p class="tabbed" style="margin-top:2px;"><span class="tab"><strong>LANGUAGES</strong></span>Cantonese</p> 
    ...: <p class="tabbed" style="margin-top:2px;"><span class="tab"></span>English</p> 
    ...: <p class="tabbed" style="margin-top:2px;"><span class="tab"></span>Putonghua</p> 
    ...: <p class="tabbed"><span class="tab"><strong>GENDER</strong></span>Male</p> 
    ...: </div>""" 

In [6]: soup = BeautifulSoup(h,"html.parser") 

In [7]: soup.find("span","tab", text="GENDER").parent.find(text=True,recursive=False) 
Out[7]: u'Male' 

それとも、クラス名なしでスパンを使用して::

だけに、親テキストを取得
In [8]: soup.find("span",text="GENDER").parent.find(text=True,recursive=False) 
Out[8]: u'Male' 
0

「p」タグを解析することで、目的の出力を得ることができます。

from bs4 import BeautifulSoup 

doc = """ 
<div> 
<p class="tabbed" style="margin-top:2px;"><span class="tab"><strong>LANGUAGES</strong></span>Cantonese</p> 
<p class="tabbed" style="margin-top:2px;"><span class="tab"></span>English</p> 
<p class="tabbed" style="margin-top:2px;"><span class="tab"></span>Putonghua</p> 
<p class="tabbed"><span class="tab"><strong>GENDER</strong></span>Male</p> 
</div> 
""" 

soup = BeautifulSoup(doc, "lxml") 

ptags = soup.find_all("p", attrs={'class':'tabbed'}) 
for ptag in ptags: 
    print ptag.contents[1].string.strip() 

あなただけの第四PTAGの値をしたい場合は、これに「forループ」上記を置き換えることができます今すぐ

Cantonese 
English 
Putonghua 
Male 

を次のようにこれはあなたにすべての「P」タグの出力が得られます1行これは、ResultSetを返す

ptags = soup.find_all("p", attrs={'class':'tabbed'}) 

Male 

説明:folowing

print ptags[3].contents[1].string.strip() 

は、出力を与えるだろうか、あなたは常に第四PTAGの値をよろしいですと仮定 - 基本的にpタグのリスト。あなたのケースの各ptagには、spanタグとstringという2つの要素があります。

for ptag in ptags: 
    print ptag.contents 

が得られます:

[<span class="tab"><strong>LANGUAGES</strong></span>, u'Cantonese'] 
[<span class="tab"></span>, u'English'] 
[<span class="tab"></span>, u'Putonghua'] 
[<span class="tab"><strong>GENDER</strong></span>, u'Male'] 

すべてのPTAGのための今

print ptags 

[<p class="tabbed" style="margin-top:2px;"><span class="tab"><strong>LANGUAGES</strong></span>Cantonese</p>, 
<p class="tabbed" style="margin-top:2px;"><span class="tab"></span>English</p>, 
<p class="tabbed" style="margin-top:2px;"><span class="tab"></span>Putonghua</p>, 
<p class="tabbed"><span class="tab"><strong>GENDER</strong></span>Male</p>] 

あなたの印刷は、その内容 "ptag.contentsは" それは は、例えば、タグ内の要素のリストを返す場合

今度はリストの2番目の要素が必要なので、2番目の要素を取得してください

for ptag in ptags: 
    print ptag.contents[1].string.strip() 

出力:

Cantonese 
English 
Putonghua 
Male 

だけptagsの第四1

print ptags[3].contents[1].string.strip() 

が出力印刷するには:

Male 
関連する問題