2012-11-06 21 views
10

gelen Etiketler (Gezinme Dizeleri değil) olan çocuklar olsun Güzel çorba belgeleme, belirli bir etiket (sırasıyla bir liste ve iterable) çocukların erişebilir niteliklerini sağlar. İçindekiler ve .children ve Etiketler. Ben sadece Tag tipi çocuklar istiyorum.güzel çorba bir Tag

rows=[x for x in table.tbody.children if type(x)==bs4.element.Tag] 

ama sadece çocukları Tag almak için daha iyi/daha pythonic/yerleşik bir yolu olup olmadığını merak ediyorum:

Şu anda bu kullanarak liste anlama gerçekleştirerek ediyorum. Burada

rows=table.tbody.find_all(True, recursive=False) 

Belgeleme: Benim durumumda http://www.crummy.com/software/BeautifulSoup/bs4/doc/#true

, masanın gerçek satırları gerekli, bu yüzden hangi aşağıdakileri kullanarak sona erdi

+5

'table.tbody.find_all (= False özyinelemeli True) (Ben denedim değil)' – jfs

+0

[Kendi sonrası olabilir answer] (http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/): Dokümanlara link, giriş/çıkışlı çalıştırılabilir kod örneği – jfs

cevap

14

sayesinde J.F.Sebastian için aşağıdaki çalışacak daha hassas ve daha okunabilir düşünüyorum:

rows=table.tbody.find_all('tr') 

Yine, dokümanlar: http://www.crummy.com/software/BeautifulSoup/bs4/doc/#navigating-using-tag-names

Bunun bir Tag'in tüm çocuklarını tekrarlamaktan daha iyi bir yol olduğuna inanıyorum.

aşağıdaki girişi olan çalıştı:

<table cellspacing="0" cellpadding="0"> 
    <thead> 
    <tr class="title-row"> 
     <th class="title" colspan="100"> 
     <div style="position:relative;"> 
      President 
      <span class="pct-rpt"> 
       99% reporting 
      </span> 
     </div> 
     </th> 
    </tr> 
    <tr class="header-row"> 
     <th class="photo first"> 

     </th> 
     <th class="candidate "> 
      Candidate 
     </th> 
     <th class="party "> 
      Party 
     </th> 
     <th class="votes "> 
      Votes 
     </th> 
     <th class="pct "> 
      Pct. 
     </th> 
     <th class="change "> 
      Change from &lsquo;08 
     </th> 
     <th class="evotes last"> 
      Electoral Votes 
     </th> 
    </tr> 
    </thead> 
    <tbody> 
     <tr class=""> 
      <td class="photo first"> 
      <div class="photo_wrap"><img alt="P-barack-obama" height="48" src="http://i1.nyt.com/projects/assets/election_2012/images/candidate_photos/election_night/p-barack-obama.jpg?1352320690" width="68" /></div> 
      </td> 
      <td class="candidate "> 
      <div class="winner dem"><img alt="[email protected]" height="9" src="http://i1.nyt.com/projects/assets/election_2012/images/swatches/[email protected]?1352320690" width="10" />Barack Obama</div> 
      </td> 
      <td class="party "> 
      Dem. 
      </td> 
      <td class="votes "> 
      2,916,811 
      </td> 
      <td class="pct "> 
      57.3% 
      </td> 
      <td class="change "> 
      -4.6% 
      </td> 
      <td class="evotes last"> 
      20 
      </td> 
     </tr> 
     <tr class=""> 
      <td class="photo first"> 

      </td> 
      <td class="candidate "> 
      <div class="not-winner">Mitt Romney</div> 
      </td> 
      <td class="party "> 
      Rep. 
      </td> 
      <td class="votes "> 
      2,090,116 
      </td> 
      <td class="pct "> 
      41.1% 
      </td> 
      <td class="change "> 
      +4.3% 
      </td> 
      <td class="evotes last"> 
      0 
      </td> 
     </tr> 
     <tr class=""> 
      <td class="photo first"> 

      </td> 
      <td class="candidate "> 
      <div class="not-winner">Gary Johnson</div> 
      </td> 
      <td class="party "> 
      Lib. 
      </td> 
      <td class="votes "> 
      54,798 
      </td> 
      <td class="pct "> 
      1.1% 
      </td> 
      <td class="change "> 
      &ndash; 
      </td> 
      <td class="evotes last"> 
      0 
      </td> 
     </tr> 
     <tr class="last-row"> 
      <td class="photo first"> 

      </td> 
      <td class="candidate "> 
      div class="not-winner">Jill Stein</div> 
      </td> 
      <td class="party "> 
      Green 
      </td> 
      <td class="votes "> 
      29,336 
      </td> 
      <td class="pct "> 
      0.6% 
      </td> 
      <td class="change "> 
      &ndash; 
      </td> 
      <td class="evotes last"> 
      0 
      </td> 
     </tr> 
     <tr> 
     <td class="footer" colspan="100"> 
      <a href="/2012/results/president">President Map</a> &nbsp;|&nbsp; 
      <a href="/2012/results/president/big-board">President Big Board</a>&nbsp;|&nbsp; 
      <a href="/2012/results/president/exit-polls?state=il">Exit Polls</a> 
     </td> 
     </tr> 
    </tbody> 
</table>