2014-11-06 83 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) 
相关问题