2014-11-06 147 views
0

如何計算沒有內容的元素? 通過說這沒有內容元素,我的意思是<div class="myclass" id="myid"></div>python沒有內容的Beautifulsoup count元素

這裏是我試圖達到的目標寫的代碼:

from bs4 import BeautifulSoup 

html_doc = """ 
<dl> 
    <dt class="details-row-7">Overall</dt> 
    <dd id="c0r11" class=" alternate details-row-7"> 
     <div class="mobile-headings">Overall</div> 
     <div class="mobile-value"> 
      <div class="ca-rating-star" data-size="1"><i class="icon-star icon-1x" style="color: #FF9900"></i> 
       <i class="icon-star icon-1x" style="color: #FF9900"></i> 
       <i class="icon-star icon-1x" style="color: #FF9900"></i> 
       <i class="icon-star icon-1x" style="color: #FF9900"></i> 
       <i class="icon-star-empty icon-1x" style="color: #FF9900"></i> 
      </div> 
     </div> 
    </dd> 
</dl> 
""" 

soup = BeautifulSoup(html_doc) 
ele = soup.find("dd", {"id": "c0r11"}, {"class": "alternate details-row-7"}) 
if ele.find(text=False): 
    con_str = ele.find("div", {"class":"mobile-value"}) 
    if con_str.find(text=False): 
     star_ele = con_str.find("div", {"class":"ca-rating-star"}) 
     if star_ele.find(text=False): 
      star = star_ele.find_all("i", {"class":"icon-star icon-1x"}) 
      i = 0 
      for s in star: 
       if s.find(text=False): 
        i += 1 
      print(i) 

但結果是0 .....

回答

1

問題是你要尋找的<i>元素,其中,text=False當你說s.find(text=False)的孩子,但<i>標籤不生孩子。你想看看<i>標籤本身是否有空文本。所以用s.get_text() == ""代替s.find(text=False)

from bs4 import BeautifulSoup 

html_doc = """ 
<dl> 
    <dt class="details-row-7">Overall</dt> 
    <dd id="c0r11" class=" alternate details-row-7"> 
     <div class="mobile-headings">Overall</div> 
     <div class="mobile-value"> 
      <div class="ca-rating-star" data-size="1"><i class="icon-star icon-1x" style="color: #FF9900"></i> 
       <i class="icon-star icon-1x" style="color: #FF9900"></i> 
       <i class="icon-star icon-1x" style="color: #FF9900"></i> 
       <i class="icon-star icon-1x" style="color: #FF9900"></i> 
       <i class="icon-star-empty icon-1x" style="color: #FF9900"></i> 
      </div> 
     </div> 
    </dd> 
</dl> 
""" 

soup = BeautifulSoup(html_doc) 
ele = soup.find("dd", {"id": "c0r11"}, {"class": "alternate details-row-7"}) 
if ele.find(text=False): 
    con_str = ele.find("div", {"class":"mobile-value"}) 
    if con_str.find(text=False): 
     star_ele = con_str.find("div", {"class":"ca-rating-star"}) 
     if star_ele.find(text=False): 
      star = star_ele.find_all("i", {"class":"icon-star icon-1x"}) 
      i = 0 
      for s in star: 
       if s.get_text() == "": # CHANGE ON THIS LINE 
        i += 1 
      print(i) 
相關問題