2016-04-22 24 views
0
<div class="info"> 
     <h3> Height: 
      <span>1.1</span> 
     </h3> 
</div> 

<div class="info"> 
     <h3> Number: 
      <span>111111111</span> 
     </h3> 
</div> 

これはサイトの一部です。最終的に、私は111111111を抽出したいと思います。私ができることはわかっています soup.find_all("div", { "class" : "info" }) 両方のdivのリストを取得するには、しかし、文字列 "Number"が含まれているかどうかを調べるためにループを実行する必要はありません。Python BeautifulSoupは、テキストを含む要素を検索します。

"1111111"を抽出してsoup.find_all("div", { "class" : "info" })にするより洗練された方法がありますが、その中に "Number"が含まれている必要がありますか?

私もnumberSoup = soup.find('h3', text='Number') を試してみましたが、それはNone

答えて

1

使用したXPath contains返します:あなたがあなた自身のフィルタ機能を書き、それが機能find_allの引数にするようにでき

root.xpath('//div/h3[contains(text(), "Number")]/span/text()') 
+0

ありがとうございました!私はそれを働かせました。 – lclankyo

1

を。ところで

from bs4 import BeautifulSoup 

def number_span(tag): 
    return tag.name=='span' and 'Number:' in tag.parent.contents[0] 

soup = BeautifulSoup(html, 'html.parser') 
tags = soup.find_all(number_span) 

、あなたはtextのparamでタグを取得することができない理由は次のとおりです。テキストparamが、私たちはその.stringその値に等しい値のタグを見つけることができます。また、タグに複数のものが含まれている場合は、.stringを参照する必要はありません。したがって、.stringNoneと定義されています。

beautiful soup docを参照できます。

関連する問題