2016-04-24 27 views
1

入れ子要素をBeautifulSoupで削り取ろうとしていて、数日前に私の髪を引っ張ってきました。私は、はるかに初心者です - この質問の単純さが誰にも怒らないことを願っています。それでも、どんな援助も大いに評価されます。Beautiful Soup&Python、入れ子要素

ここに私が掻き取ろうとしているhtmlがあります。

 <div id="specs" class="pane"> 
      <div class="col"> 
       <ul class="list"> 
       <li> 
        <ul> 
         <li><b>width</b>2</li> 
         <li><b>length</b>1</li> 
         <li><b>color</b>blue</li> 
         <li><b>metal</b>steel</li> 
        </ul> 
       </li> 
       </ul> 
      </div> 
     </div> 

と完璧な世界で

は、ここで、私は近くに来ている間

width, 2 
length, 1 
color, blue 
metal, steel 

が、私はこれが答えであることができない今、知っている...私の結果です...まだ同じ時間に、私は李の要素をループすることはできません。

div = div.find("div", {"id":"specifications"}) 
result = [i for i in div.find('li')] 

誰がちょうどいい方向に初心者をプッシュすることができた場合、それは非常に大幅に感謝すること、および任意の洞察力のために、事前にあなたに感謝します!

+1

あなたはbeautifulsoupオブジェクトを作成するコードの完全な開始を表示できますか? –

答えて

0

次の例のように、ターゲットにb要素を見つけるためにselect()を経由してCSSセレクタを使用することができます。

from bs4 import BeautifulSoup 
raw = '''<div id="specs" class="pane"> 
      <div class="col"> 
       <ul class="list"> 
       <li> 
        <ul> 
         <li><b>width</b>2</li> 
         <li><b>length</b>1</li> 
         <li><b>color</b>blue</li> 
         <li><b>metal</b>steel</li> 
        </ul> 
       </li> 
       </ul> 
      </div> 
     </div>''' 
soup = BeautifulSoup(raw, "lxml") 

result = soup.select("div#specs b")  
for r in result: 
    print r.get_text(), r.next_sibling 

を出力:

width 2 
length 1 
color blue 
metal steel 

以下は、純lxml.html代替手段です比較(OPはlxmlに興味があり、彼のコメントのベルから判断しているようだうーん)。出力は上のBSスニペットとまったく同じです。

from lxml import html 
raw = '''assume the same XML as in the previous snippet''' 
root = html.fromstring(raw) 

result = root.cssselect("div#specs b") 
for b in result: 
    print b.text, b.tail 

lxmlxpath()を介して)XPathと(cssselect()を介して)CSSセレクタ、及びlxml is fastの両方をサポートします。

+0

har07、私はマシン上で動作するようにlxmlを取得することに問題がありましたが、提供したもののシンプルさが私を(特に初心者として)納得させました。すべてが今、完璧に動作しています。私はLXMLの使用を開始することに興奮しています。 – pants

+0

@パンツあなたは大歓迎です!あなたが今働いていることを知ってうれしい。 BTWは、この回答が問題の問題を解決したので、あなたは答えとして[accepting](http://stackoverflow.com/help/someone-answers)を検討したいと思うかもしれません。ありがとう – har07

関連する問題